在Ruby中逐行合并两个文本文件

时间:2015-10-15 15:29:13

标签: ruby file text merge

我正在试图弄清楚如何逐行合并两个文本文件。字母文件包含A到I列中的字母。数字包含1到9列中的数字。这是我到目前为止所拥有的:

file='C:\\Users\\USERNAME\\Desktop\\numbers.txt'
f = File.open(file, "r")
f.each_line { |line|
  dile='C:\\Users\\USERNAME\\Desktop\\letters.txt'
  d = File.open(dile, "r")
  d.each_line { |dine| 
    this = line + dine 
    print this
  }
}

但我的结果是这样的:

1
A
1
B
1
C
1
D
1
E
1
F
1
G
1
H
1
I
1
J2
A
2
B
2
C
2
D
2
E
2
F
2
G
2
H
2
I
2
J3
A
3
B
3
C
3
D
3
E
3
F
3
G
3
H
3
I
3
J4
A
4
B
4
C
4
D
4
E
4
F
4
G
4
H
4
I
4
J5
A
5
B
5
C
5
D
5
E
5
F
5
G
5
H
5
I
5
J6
A
6
B
6
C
6
D
6
E
6
F
6
G
6
H
6
I
6
J7
A
7
B
7
C
7
D
7
E
7
F
7
G
7
H
7
I
7
J8
A
8
B
8
C
8
D
8
E
8
F
8
G
8
H
8
I
8
J9
A
9
B
9
C
9
D
9
E
9
F
9
G
9
H
9
I
9
J10A
10B
10C
10D
10E
10F
10G
10H
10I
10J

当我真正想要的是这样的时候:

1A
2B
3C
4D
5E
6F
7G
8H
9I

任何人都知道如何做到这一点?

3 个答案:

答案 0 :(得分:3)

f1, f2 = [
  'C:\\Users\\USERNAME\\Desktop\\numbers.txt',
  'C:\\Users\\USERNAME\\Desktop\\letters.txt'
]


File.readlines(f1).map(&:chomp)
                  .zip(File.readlines(f2).map(&:chomp))
                  .map(&:join)

或者,没有双重咀嚼:

File.readlines(f1).zip(File.readlines(f2))
                  .map(&:join)
                  .map { |s| s.gsub /#$//, '' }

答案 1 :(得分:1)

因为每行都有换行符\n。尝试使用chomp

this = line.chomp + dine.chomp

答案 2 :(得分:1)

喜欢@mudasobwa回答

=> File.readlines('num').zip(File.readlines('let')).flat_map { |x| x.map(&:chomp!).join }
=> [
  [0] "1A",
  [1] "2B",
  [2] "3C",
  [3] "4D",
  [4] "5E"
]

没有双chomp