本帖最后由 redcat 于 2012-3-29 22:57 编辑
file<-file("c://1.txt","r") #打开1.txt
hash_array=new.env() #创建一个新散列
f1=readLines(file,1) #读文件一行
while(length(f1)!=0){
line=strsplit(f1," ") #按空格分割每行
assign(line[[1]][2],line[[1]][1],hash_array) #每行,两个元素装入散列
f1=readLines(file,n=1) #读一行
}
close(file)
file<-file("c://2.txt","r") #打开2.txt
outfile <- file("c://3.txt", "w") # 创建一个3.txt准备写入文件
f2=readLines(file,1) #读一行
while(length(f2)!=0){ #由于文件比较大,所以一行一行处理,然后一行一行写出,这样少占内存
line=strsplit(f2," ") #按空格分割每行
if(exists(line[[1]][1], envir=hash_array)&&exists(line[[1]][2], envir=hash_array)){ #判断是否两个第二个文件的两列都可替换
x1=as.numeric(mget(line[[1]][1],hash_array)) #编码替换,即2.txt中的元素按散列中的键和值关系替换
x2=as.numeric(mget(line[[1]][2],hash_array))
min=min(x1,x2) #选取替换后较小的一个写到第一列
max=max(x1,x2) #选取替换后较大的一个写到第二列
cat(min,file=outfile) #打印输出到3.txt
cat(" ",file=outfile)
cat(max,file=outfile)
cat("\n",file=outfile)
}
f2=readLines(file,n=1)
}
close(file)
close(outfile)
~~~~~~~~~~~~~~~~~~~~~
附注:
1.txt为:
1 a
2 b
3 c
4 d
2.txt为:
a b
a c
c b
d e
输出结果:
3.txt:
1 2
1 3
2 3
由于文件比较大,所以一行一行处理,然后一行一行写出,这样少占内存, |