Мой собственный маленький проект состоит в объединении двух журналов на основе временных меток, оба журнала имеют одну и ту же метку времени. Некоторые строки не имеют временных меток и должны быть напечатаны с помощью строки с меткой времени.Как выполнить итерацию по двум массивам в отдельности
так что если у меня есть журналы, как это:
2015-06-25 09:20:25,654 file1 text2
2015-06-25 09:20:23,654 file1 text1
test text1 belongs to the row above
2015-06-25 09:20:27,654 file1 text3
А другой файл является таким же образом, но с различными временными метками. Поскольку я новичок в Ruby, я обнаружил, что этот проект может быть хорошим началом.
До сих пор я нашел достаточно помощи, что я должен использовать счетчики, и я предполагаю, что в
loop do
code
end
Но как я решу, когда я хочу итерацию file1 file2 без буду перебирать тоже? И как узнать, когда один итератор находится в конце файла, чтобы я мог распечатать остальную часть другого файла?
Должен ли я сначала прочитать файлы для каждого массива или просто выполнить два потока для каждого файла и один поток в выходной файл?
summary: Я хочу выполнить итерацию по двум файлам, пока один файл не достигнет конца, а затем напечатайте последние строки в другом файле и получив контроль над тем, когда итерация произойдет в обоих файлах.
Спасибо за ваше время и ввод!
** Edit: **
Но я хочу, чтобы объединить их вместе с временными метками. Как:
2015-06-25 09: 20: 24123 file1 text1
2015-06-25 09: 20: 23123 file2 text1
2015-06-25 09: 20: 26123 file2 text2
Выход:
2015-06-25 09: 20: 23123 file2 text1
2015-06-25 09: 20: 24123 file1 text1
2015-06-25 09: 20: 26123 file2 text2
Основном если У меня есть два массива, которые я перебираю с помощью итератора x и y. Если x> y, тогда поместите y в выходной файл и сделайте как y ++, затем продолжайте проверять их против eachother до конца файла. Если x равно eof, просто добавьте остальную часть y в выходной файл.
Вы можете проверить, если вы находитесь в конце вашего потока входного файла, используя [ВФ?] (http://ruby-doc.org/core-2.2.2/IO.html#method-i-eof -3F). Насколько известно, когда вы хотите читать из файла 1 или 2, это сводится к вашим требованиям. Мне трудно понять, что вы имеете в виду, когда говорите «затем распечатывайте последние строки в другом файле». Если бы вы могли уточнить, что я мог бы предоставить пример кода в ответе. – Brandon
Итак, журналы используют один и тот же синтаксис. дате информации о времени в нормальном состоянии Log4j, а иногда есть stacktrace с и нет даты в начале строки. Итак, когда я перебираю два файла и объединяя их с большим одиночным выходным файлом, я хочу взять все данные, оставшиеся в файле2, и просто нажимать все на выходной файл, если file1 достигает его адресата или файла2, поскольку я знаю метка времени выше, потому что ее eof в файле1. Надеюсь, что что-то прояснит. – Lundell
Насколько велики файлы? Это самая большая проблема, которую я вижу с этим, так как им нужно будет как поместиться в памяти. – Brandon