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函数和foreach循环

于 2012-04-03T21:58:01.917 回答
0

用于file_get_contents()将文件读入单个字符串。然后,您可以使用正则表达式来匹配空格,或者一个新行,然后是空格,等等。

我会发布正则表达式,但我不确定你到底想要做什么。你不能在这里测试正则表达式:http: //gskinner.com/RegExr/

于 2012-04-03T21:52:21.583 回答
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

又一个解决方案。为您收集数组中的行。我想我更喜欢@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 回答