2012-07-25 100 views
0

我有一个名为“data.txt”的文件。在这个文件中,有30行字符串都具有相同的长度。它看起来像这样:重新格式化文件的内容

2QA4ZRDUT 
IDVLTLZSC 
4GYC3HCMV 
1W6409JD5 
70P7U66TE 

...等等。

我现在想要做的是重新设置这些行的格式。我想在一行上放5个字符串,用“;”分隔。在那之后,我希望有一个新的生产线,并在未来5到最后,它应该是这样的:

2QA4ZRDUT;IDVLTLZSC;4GYC3HCMV;1W6409JD5;70P7U66TE; 
NGN1TGF6G;JWVI7LSIZ;U99TMVXXK;KLBDMRPQV;MEFKLUO3; 

...等等,直到该文件的全部内容被重新格式化这个样子。

最近几个小时我一直试图通过使用for,foreach和while循环来实现这一点,但我只设法获得一行。我希望有人可以帮助我,因为我没有经验过PHP。

这是 “data.txt中” 的内容:

2QA4ZRDUT 
IDVLTLZSC 
4GYC3HCMV 
1W6409JD5 
70P7U66TE 
OG2JBBZF6 
5391PHOVW 
ZAJ3OZ4H2 
GMOB9E9X7 
Q8U4C8ZK1 
0WDZLRWWJ 
N487W3S24 
PKXQFFEK3 
NSMKC29IB 
HOLI1T2ZB 
DVPIVLLLS 
FH7RSZWTM 
9VSUWPZEX 
NM6ZWV19I 
NGN1TGF6G 
JWVI7LSIZ 
U99TMVXXK 
KLBDMRPQV 
MEFKLUO3L 
LICFIK24W 
ELGPLCK51 
QQS4SOJV1 
KJ2UVTU1B 
FLQ6T7LG6 
QJZLAPYN1 
+2

提示:使用模运算符 – 2012-07-25 16:04:47

回答

0

类似的东西:

<?php 

$oldf=fopen('data.txt','r'); 
$newf=fopen('data_new.txt','w'); 
$i=0; 
while(!feof($oldf)) 
{ 
    $i++; 
    $line=fgets($oldf); 
    fwrite($newf,$line.';'); 
    if($i%5==0) 
     fwrite($newf,"\n"); 
} 
fclose($oldf); 
fclose($newf); 
0

试试这个:

<?php 
    $file_name = "test.txt"; // Change file name as needed 
    $file_data = file_get_contents($file_name); 
    $file_data_array = explode('\n', $file_data); 
    $i = 0; 
    $new_file_data = ""; 
    foreach ($file_data_array as $piece) 
    { 
     $new_file_data .= $piece . ';'; 
     $i++; 
     if ($i % 5 == 0) // Change number of pieces you want on a line as needed 
     { 
      $new_file_data .= '\n'; 
     } 
    } 
    file_put_contents($file_name, $new_file_data); 
?> 
0

这应做到:

$str = '2QA4ZRDUT 
IDVLTLZSC 
4GYC3HCMV 
1W6409JD5 
70P7U66TE 
OG2JBBZF6 
5391PHOVW 
ZAJ3OZ4H2 
GMOB9E9X7 
Q8U4C8ZK1 
0WDZLRWWJ 
N487W3S24 
PKXQFFEK3 
NSMKC29IB 
HOLI1T2ZB 
DVPIVLLLS 
FH7RSZWTM 
9VSUWPZEX 
NM6ZWV19I 
NGN1TGF6G 
JWVI7LSIZ 
U99TMVXXK 
KLBDMRPQV 
MEFKLUO3L 
LICFIK24W 
ELGPLCK51 
QQS4SOJV1 
KJ2UVTU1B 
FLQ6T7LG6 
QJZLAPYN1'; 

$arr = explode(PHP_EOL, $str); 
$c = 1; 
$str3 = ''; 
foreach ($arr as $item) { 
    $str3.= $item.';'; 
    if ($c % 5 == 0) { 
     $str3.= PHP_EOL; 
    } 
    ++$c; 
} 
echo "<p>$str3</p>"; 

请注意,您不会在浏览器中看到换行符,但当您查看源文件时它们会显而易见。

编辑:我在这里使用PHP_EOL而不是“\ n”,因为其他答案已经提示。这确保了该脚本将正确只要工作在任何平台(赢,MacOS的& * nix中)上的PHP设置auto_detect_line_endings设置为true

+0

非常感谢你。那个人的工作很棒。 – kolja 2012-07-25 16:21:06

+0

@ user1418870:很高兴能帮上忙,现在您能接受这个答案吗? – hellsgate 2012-07-25 16:22:03