0

「data.txt」というファイルがあります。このファイルには、すべて同じ長さの文字列を含む30行があります。次のようになります。

2QA4ZRDUT
IDVLTLZSC
4GYC3HCMV
1W6409JD5
70P7U66TE

... 等々。

私が今やりたいのは、これらの線を再フォーマットすることです。「;」で区切って、1行に5つの文字列が必要です。その後、新しい行と次の5行が必要です。最終的には次のようになります。

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

...など、ファイルのコンテンツ全体がこのように再フォーマットされるまで続きます。

過去数時間、for、foreach、whileループを使用してこれを達成しようとしていましたが、1行しか取得できませんでした。私は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
4

3 に答える 3

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);
于 2012-07-25T16:08:36.460 に答える
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);
?>
于 2012-07-25T16:10:22.217 に答える
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>";

改行はブラウザーでは表示されませんが、「ソースを表示」すると明らかになります。

編集:他の回答が示唆しているように、ここでは「\ n」の代わりにPHP_EOLを使用しています。これにより、PHP 設定のauto_detect_line_endingsが true に設定されている限り、スクリプトがどのプラットフォーム (Win、MacOS & *nix) でも正しく動作することが保証されます。

于 2012-07-25T16:12:56.647 に答える