You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP读取制表符分隔文件并将指定列写入新文本文件

如何用PHP读取制表符分隔文件并将指定列写入新文本文件

嗨,看起来你已经完成了最基础的文件读取部分,很棒!我来帮你调整代码,实现只把邮箱列写入output.txt的需求,顺便修正几个小问题~

首先,你原来的代码里有个关键问题:exit;语句会让循环只执行一次就停止,所以只能处理第一行数据,得把它删掉才行。接下来咱们一步步修改:

方法一:逐行处理(适合大文件,节省内存)

这种方式会逐行读取输入文件,避免一次性加载整个文件到内存,适合较大的文件:

// 打开输入文件,'r'表示只读模式
$inputFp = fopen('input.txt', 'r');
// 打开输出文件,'w'表示写入模式(若文件已存在会清空内容,要追加用'a')
$outputFp = fopen('output.txt', 'w');

// 先检查两个文件是否成功打开,避免后续报错
if (!$inputFp || !$outputFp) {
    die('无法打开文件,请检查文件路径是否正确,以及PHP是否有读写权限!');
}

while (!feof($inputFp)) {
    $line = fgets($inputFp);
    // 跳过空行,避免处理无效内容
    if (trim($line) === '') {
        continue;
    }
    // 用制表符分割每行内容
    $data_txt = str_getcsv($line, "\t");
    // 确保当前行确实有邮箱列(索引为1),避免格式错误导致的报错
    if (isset($data_txt[1])) {
        // 把邮箱内容写入输出文件,加上换行符保证每行一个邮箱
        fwrite($outputFp, $data_txt[1] . "\n");
    }
}

// 操作完成后记得关闭文件句柄,这是良好的编程习惯
fclose($inputFp);
fclose($outputFp);

echo '搞定!邮箱列已经写入output.txt啦~';

方法二:一次性读取(适合小文件,代码更简洁)

如果你的输入文件不大,可以用更简洁的方式,一次性读取所有内容再处理:

// 读取整个输入文件的内容
$content = file_get_contents('input.txt');
// 按换行符分割成每行
$lines = explode("\n", $content);
// 用来存储要写入的邮箱内容
$outputContent = '';

foreach ($lines as $line) {
    $line = trim($line);
    // 跳过空行
    if ($line === '') {
        continue;
    }
    $data = str_getcsv($line, "\t");
    // 确保有邮箱列再添加到输出内容里
    if (isset($data[1])) {
        $outputContent .= $data[1] . "\n";
    }
}

// 把整理好的邮箱内容写入输出文件
file_put_contents('output.txt', $outputContent);

echo '操作完成!';

几个需要注意的小细节:

  • 文件路径:如果input.txt不在PHP脚本的同一目录,记得用绝对路径(比如/home/user/input.txt)
  • 权限问题:要确保PHP有读取input.txt和写入output.txt的权限,否则会无法操作
  • 分隔符确认:确保你的输入文件确实是用制表符\t分隔的,如果是空格的话,需要调整str_getcsv的第二个参数

备注:内容来源于stack exchange,提问作者Karg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:48:01