重新格式化文件的内容

时间:2012-07-25 16:03:25

标签: php foreach while-loop fopen explode

我有一个名为“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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);
?>

答案 2 :(得分: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而不是&#34; \ n&#34;正如其他答案所暗示的那样。只要PHP设置auto_detect_line_endings设置为true,这就可以确保脚本在任何平台(Win,MacOS和* nix)上都能正常工作