|
本帖最后由 biostat 于 2013-2-28 14:36 编辑
#题目:将文件1中的编码,替换文件2(大于10万行)中的编码,替换后小的放在前面,大的放在后面,输出- 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
由于文件比较大,所以一行一行处理,然后一行一行写出,这样少占内存
|
|