【问题标题】:Reformatting The Content Of A File重新格式化文件的内容
【发布时间】:2012-07-24 03:10:00
【问题描述】:

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

【问题讨论】:

  • 提示:使用取模运算符

标签: php foreach while-loop fopen explode


【解决方案1】:

类似的东西:

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

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      【解决方案3】:

      应该这样做:

      $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”,正如其他答案所建议的那样。这可以确保脚本在任何平台(Win、MacOS 和 *nix)上都能正常工作,只要 PHP 设置 auto_detect_line_endings 设置为 true

      【讨论】:

      • @user1418870:很高兴能帮上忙,现在您能接受这个答案吗?
      猜你喜欢
      • 2020-10-28
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 2020-01-06
      相关资源
      最近更新 更多