2015-10-15 3 views
0

Я пытаюсь выяснить, как объединить два текстовых файла по строкам. Файл содержит буквы буквы в столбце А до I. Числа содержит цифры в столбце от 1 до 9. Это то, что я до сих пор:Объединить два текстовых файла по строкам в Ruby

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 

Кто-нибудь есть какие-либо идеи, как это сделать?

+0

Не могли бы вы указать ввод двух файлов 'numbers.txt' и' letters.txt'? –

ответ

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 /#$//, '' } 
+0

Отлично! Спасибо дружище! – semiflex

1

Его потому, что каждая линия уже несет фидерный канал \n. Попробуйте использовать chomp:

this = line.chomp + dine.chomp 
+0

Ahh Я добавил его к исходному вопросу: файл букв содержит буквы в столбце A-I. Числа содержат числа в столбце от 1 до 9 – semiflex

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

Смежные вопросы