如何循环浏览两个文件并将它们组合在一起?

时间:2011-02-06 18:43:47

标签: php mysql loops

我有两个文本文件,想要遍历这两个文件然后合并两行(第一个测试文件的第1行和第二个文本文件的第1行。就像成千上万行一样)并执行一些功能

我熟悉循环浏览一个文件,下面给出了代码:

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

//some function


}

但我如何处理两个文件并将它们组合在一起呢?

3 个答案:

答案 0 :(得分:1)

通过搜索表格不确定你的意思,但打开这两个文件并用它们做些事情:

$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.
}

注意:如果你在另一个文件之前命中文件的末尾可能会遇到麻烦,只有当它们长度不同时才会发生,可能需要一些if控制语句来设置$ line1或$ line2如果""各自的文件feof()或其他内容,一旦两者都到达文件末尾,while循环将结束。

答案 1 :(得分:0)

示例:

$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条件下使用两个文件中较长的一个。
  • 您可能需要调整fread中读取的字节数,具体取决于行数
  • 将“”更改为您想要的任何分隔符

答案 2 :(得分:0)

你可以像Crayon和Tim那样以编程方式执行此操作。如果两个文件的行数相同,则应该有效。如果行号不同,则必须遍历较大的文件以确保获得所有行或检查两者上的EOF。

要逐行组合,我经常使用非常快的unix命令粘贴。这也解释了不同长度的文件。在命令行上运行:

paste file1 file2 > output.txt

请参阅manpage了解paste命令行选项,字段分隔符。

man paste