【问题标题】:Split Text File for Every x Lines每 x 行拆分文本文件
【发布时间】:2014-01-20 15:42:08
【问题描述】:

如何根据行数将一个文本文件拆分为单独的文件?例如文本文件有 10000 行,我想要 5 个单独的文件,每个文件 2000 行。

我试过这个:Split a text file in PHP

基本上我想要一个类似的解决方案,但通过计算行数而不是字节数。

谢谢!

--编辑-- 我按照@user1477388 的提示让它工作了

<?php

// get file contents into string
$stringData = file_get_contents('MyTextFile.txt');

// split by newline
$arrayData = split("\n", $stringData);

$fileCount = 0;

// loop through arrayData
for ($i = 0; $i < count($arrayData); $i++)
{
    $file = 'myFileName';
    // for every 2000 lines, create a new file
    if ($i % 2000 == 0)
    {
        $fileCount++;
    }
    file_put_contents($file . $fileCount . '.txt', $arrayData[$i]."\n", FILE_APPEND | LOCK_EX);
}

?>

【问题讨论】:

  • 不能使用splitcsplit 命令吗?
  • 到目前为止你做了什么?
  • @MarkusMalkusch 他明确表示“我试过这个:”...
  • 您是否将一行定义为由换行符分隔的一系列字符?如果是这样,也许每 2000 个都算一次……
  • 是的,你会想看看split,就像 Basile 说的那样。查看md1.php.net/split,您将通过\r\n 拆分您的字符串(文本文档),这将为您提供一个可以循环的数组。然后,在循环时,您可以说每循环 2000 次,创建一个新文件。这很简单。

标签: php string text


【解决方案1】:

像这样简单:

$in = file("file");
$counter = 0; // to void warning    
while ($chunk = array_splice($in, 0, 2000)){
      $f = fopen("out".($counter++), "w");
      fputs($f, implode("", $chunk));
      fclose($f);
}

// 未测试。

【讨论】:

  • 这创建了我的文本文件的副本,但带有双换行符。
【解决方案2】:

我不知道这有多有效,或者它是否会起作用,但至少它会给你一个很好的起点:

<?php

// get file contents into string
$stringData = file_get_contents('MyTextFile.txt');

// split by newline
$arrayData = split('\r\n', $stringData);

// loop through arrayData
for ($i = 0; $i < count($arrayData); $i++)
{
    $file = 'myFileName';
    $fileCount = 1;
    // for every 2000 lines, create a new file
    if ($i % 2000 == 0)
    {
        $fileCount++;
    }
    file_put_contents($file . $fileCount . '.txt', $arrayData[$i], FILE_APPEND | LOCK_EX);
}

?>
  • 代码未经测试。

【讨论】:

  • 不确定,但我需要将 '\r\n' 更改为 "\n" 才能使拆分生效。此外,将$fileCount = 1; 移动到循环的外部/上方,因此当嵌套代码再次运行时它不会返回到 1。但是,是的,现在已经解决了。谢谢!
  • 是的,将其移到循环之外是有意义的:) 请接受并投票支持对您有帮助的答案。
  • 两个答案都很好,但我不能接受 2 个答案。当我有足够的代表时会投票。谢谢!
  • 不,您只能接受一个 - 对您帮助最大的那个。您可以随心所欲地投票。
猜你喜欢
  • 1970-01-01
  • 2016-01-31
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多