Как мне перебрать два файла и объединить одно и то же? - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть два текстовых файла, и я хочу перебрать оба файла, затем объединить обе строки (строка 1 первого тестового файла и строка 1 второго текстового файла. Как это для тысяч строк) и выполнить некоторую функцию

Я знаком с циклическим просмотром одного файла, и этот код приведен ниже:

$lines = file('data.txt');
foreach ($lines as $line) {

//some function


}

, но как мне сделать два файла и объединить строки?

Ответы [ 3 ]

1 голос
/ 06 февраля 2011

Не уверен, что вы подразумеваете под поиском по таблице, но чтобы открыть оба файла и что-то с ними делать:

$file1 = fopen("/path/to/file1.txt","r"); //Open file with read only access
$file2 = fopen("/path/to/file2.txt","r");
$combined = fopen("/path/to/combined.txt","w"); //in case you want to write the combined lines to a new file

while(!feof($file1) && !feof($file2))
{
     $line1 = trim(fgets($file1));  //Grab a line of the first file, note the trim will clip off the carriage return/new line at the end of the line, can remove it if you don't need it.
     $line2 = trim(fgets($file2));  //Grab a line of the second file

     $combline = $line1 . $line2;

     fwrite($combined,$combline . "\r\n"); //Write to new combined file, and add a new carriage return/newline at the end of the combined line to replace the one trimmed off.

     //You can do whatever with data from $line1, $line2, or the combined $combline after getting them.
}

Примечание: у вас могут возникнуть проблемы, если вы столкнетесь с концом файла на одномДля файла перед другим, что может произойти, только если они не имеют одинаковую длину, могут потребоваться некоторые операторы control, чтобы установить $ line1 или $ line2 на "", или что-то еще, если feof() их соответствующие файлы, как только оба попадутконец файла, цикл while завершится.

0 голосов
/ 06 февраля 2011

Вы можете сделать это программно, как показали Крайон и Тим. Если оба файла имеют одинаковое количество строк, это должно работать. Если номер строки отличается, вам придется перебрать больший файл, чтобы убедиться, что вы получили все строки или проверить EOF на обеих.

Для объединения строк за строкой я часто использую команду вставки Unix, которая очень быстрая. Это также учитывает файлы различной длины. Запустите это в командной строке:

paste file1 file2 > output.txt

См. manpage для paste для параметров командной строки, разделителей полей.

man paste
0 голосов
/ 06 февраля 2011

Пример:

$file1 = fopen("file1.txt", "rb");
$file2 = fopen("file2.txt", "rb");

while (!feof($file1)) {
  $combined = fread($file1, 8192) . " " . fread($file2, 8192);
  // now insert $combined into db
}
fclose($file1);
fclose($file2);
  • вы хотите использовать более длинный из двух файлов в состоянии while.
  • вам может понадобиться настроить байты, прочитанные во фреде, в зависимости от длины ваших строк
  • измените "" на любой желаемый разделитель
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...