1

ここに初めて投稿し、開発を始めたばかりです。

複数行のテキスト ファイルの出力を変更しようとしています。文字で始まるものもあれば、空白/タブで始まるものもあります。タブ/空白で始まる行を、その直前の行と結合したいと考えています。正規表現でこれを行うことを検討してきましたが、構造化する方法がわかりません。「foreach」を使用して各行を調べ、空白のある各行を見つけ、一連の正規表現を使用してそれらを前の行に結合する必要があると考えています。これは、foreach があるべきだと私が信じている場所とともに、私がどこまで到達したかです。

<?php

$file_handle = fopen("parse.txt", "r");

while (!feof($file_handle)){

    $each_line = fgets($file_handle);
    foreach ($each_line    ){

        }

    print $each_line . "<br />";
}

fclose($file_handle);

?>

特定のテキスト ファイルはhttp://krondorkrew.com/parse/parse.txt にあります。そこに移動して /parse フォルダのインデックスを見ると、この php の現在のビルドも含まれています。

私の次のステップは、最初の : 各行で展開することにより、各行を個別の配列に分割することですが、素晴らしい人々に助けを求める前に、自分でその問題と戦ってみたいと思います (しかし、洞察があれば、私はそうするでしょう.目をそらす)

すべての助けを前もってありがとう!

4

5 に答える 5

1

このコードは仕事をします:

<?php

$output = "";
foreach (file('parse.txt') as $line) {
  $output .= trim($line);

  // if the current line starts noes not starts with a tab, we append
  // a \n to it
  if (substr($line, 0, 1) != "\t") {
    $output .= "\n";
  }
}
echo $output;

ただし、この種のテキスト操作には正規表現を使用する必要があります。 コードパッドの例はこちら

于 2012-04-03T21:57:44.977 に答える
1

以下は、関数が欠落しているコード例ですstartsWithWhitespaceOrTab(簡単に記述できるはずです。これは例として残しておきます)。残りはすでに機能しています:

foreach (file('parse.txt', FILE_IGNORE_NEW_LINES) as $line) {
    if (!startsWithWhitespaceOrTab($line)) {
        echo "\n";
    }
    echo $line;
}

PHPfile関数とforeachloopを参照してください。

于 2012-04-03T21:58:01.917 に答える
0

おそらく、これらの行に沿って何かが必要になるでしょう:

<?php

$file_handle = fopen("parse.txt", "r");

$key = null;
$arr = array();

while (!feof($file_handle)){

    $each_line = fgets($file_handle);

    if ($key && preg_match('/^\s+/', $each_line)) {
        $arr[$key] .= ' ' . trim($each_line);
    } else if (preg_match('/^([a-zA-Z]+):(.*)$/', $each_line, $m)) {
        $key = $m[1];
        $arr[$key] = trim($m[2]);
    }

}

fclose($file_handle);

?>
于 2012-04-03T21:54:46.450 に答える
0

file_get_contents()ファイルを単一の文字列に読み取るために使用します。次に、正規表現を使用して空白、または改行と空白などを一致させることができます。

正規表現を投稿しますが、何をしようとしているのか正確にはわかりません。ここで正規表現をテストすることはできません: http://gskinner.com/RegExr/

于 2012-04-03T21:52:21.583 に答える
0

さらに別の解決策。行を配列に収集します。私は @pinouchon の方が好きだと思います。

$file_handle = fopen("parse.txt", "r");
$fixed = array();
while (!feof($file_handle)){
    $line = fgets($file_handle);
    if (ctype_space($line[0])) { // Checks for whitespace
        $fixed[count($fixed)-1].= trim($line); // Adds to previous line
    } else {
        $fixed[] = trim($line); // Otherwise, keep line as is
    }
}
fclose($file_handle);

// Print
echo implode("\n",$fixed); 
于 2012-04-03T21:59:46.750 に答える