使用 PHP 解析制表符分隔的文件并创建另一个只有一列作为输出的文本文件

Parse a tab delimited file and create another text file with only one column as output using PHP

提问人:Karg 提问时间:9/20/2023 最后编辑:Karg 更新时间:9/21/2023 访问量:47

问:

我需要读取带有“\t”分隔符的文本文件(input.txt),并且仅在另一个文本文件(output.txt)中显示一列作为输出。
我对此很陌生,希望能找到一些解决方案。

input.txt文件如下所示:

user1 email1 group1
user2 email2 group2
user3 email3 group3 and so on

我设法找到以下代码来读取文件并打印数组,但不确定如何只将一列写入文件。output.txt

$fp = fopen('input.txt', 'r');

while ( !feof($fp) )
{
    $line = fgets($fp);

    $data_txt = str_getcsv($line, "\t");
    print_r($data_txt);
    exit;
}                              

fclose($fp);

这给了我一个数组中的结果:

array (
  0 => 'user1',
  1 => 'email1',
  2 => 'group1',
)array (
  0 => 'user2',
  1 => 'email2',
  2 => 'group2',
)array (
  0 => 'user3',
  1 => 'email3',
  2 => 'group3',
)

现在,如何电子邮件列推送到输出.txt文件中?有什么想法吗?

output.txt 中的预期输出如下所示:

email1
email2
email3 and so on

在过去的 2 天里,我查看了其他类似的问题,但找不到将输出写入新文本文件的正确答案。

提前致谢!

PHP 解析

评论

0赞 Markus Zeller 9/21/2023
而不是 和 ,只需将电子邮件写入数组或文件中。print_r()exit
0赞 Karg 9/21/2023
谢谢!标记的答案以更简单的方式做到这一点。
0赞 Markus Zeller 9/21/2023
标记的答案与我所说的完全一样:)

答:

0赞 nice_dev 9/21/2023 #1

嗯,有很多方法可以实现这一点。我建议您打开输出文件的文件指针,并在读取新行时逐行写入此文件,然后从刚刚读取的字符串数组中选择第二个索引。

<?php

$fp = fopen('input.txt', 'r');
$outputFP = fopen('output.txt', 'w+');

while (!feof($fp) ){
    $line = explode("\t",fgets($fp));
    fwrite($outputFP, $line[1] . PHP_EOL);
}                              

fclose($fp);
fclose($outputFP);

评论

1赞 Karg 9/21/2023
这行得通!谢谢!比修改我的代码要简单得多。
0赞 Karg 9/21/2023
还有一件事,我在此代码中更改什么以获取行而不是列?类似于 user1 email1 group1。
0赞 nice_dev 9/21/2023
@Karg 是具有所有 3 个值的数组。$line
0赞 Karg 9/21/2023
是的 - 但我尝试了几种不同的变体来只得到一行,但每一行都失败了。你能帮忙吗!?
0赞 nice_dev 9/22/2023
@karg 你需要详细说明这一点。如果你问一个新问题会更好。