2014-01-20 40 views
0

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

我曾尝试这样的: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); 
} 

?> 
+1

你不能使用'split'或'csplit'命令吗? –

+1

你到目前为止做了什么? –

+0

@MarkusMalkusch他明确指出“我试过这个:”...... – user1477388

回答

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); 
} 

//未经测试。

+0

这创建了我的文本文件的副本,但带有双行换行符。 – r1pd

+0

内部固定代码 – jancha

+0

它的工作,谢谢! – r1pd

0

我不知道如何有效的,这是或者如果它甚至会工作之后,但至少它会给你一个很好的起点:

<?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); 
} 

?> 
  • 未测试的代码。
+1

不确定,但我需要用'\ r \ n''用\“\ n”'改变分割才能工作。此外,将'$ fileCount = 1;'移到循环的外部/上面,以便在嵌套代码再次运行时不会返回到1。但是,现在已经解决了。谢谢! – r1pd

+0

是的,将它移动到循环之外是有意义的:)请接受并且提出帮助你的答案。 – user1477388

+0

这两个答案都很好,但我不能接受2个答案。当我有足够的代表时,我会赞成。谢谢! – r1pd

相关问题