【问题标题】:PHP: Insert line break after every $num word in a text filePHP:在文本文件中的每个 $num 单词后插入换行符
【发布时间】:2015-06-08 18:20:33
【问题描述】:

我想通过在每 4 个单词后插入换行符来清理 .txt 文件以使其更具可读性。该文件已被数组中的数据填充。

这是我目前通过查看thisthis 得出的结论:

<?php
require "simple_html_dom.php";

$html = file_get_html("http://www.lipsum.com/");

$data = array();
$counter = 0;


foreach($html->find("div") as $tr){
    $row = array();
    foreach($tr->find("div") as $td){
        $row[] = $td->plaintext;
    }
     $data[] = $row;

    }


ob_start();
var_dump($data);

$data = preg_replace('~((\w+\s){4})~', '$1' . "\n", $data);
file_put_contents('new_text_file.txt', $data);


//$handlefile = fopen("newfile.txt", "w") or die("Unable to open file!");
//file_put_contents('newfile.txt', $data);
//$output = ob_get_clean();
//$outputFile = "newfile.txt";


//fwrite($handlefile, $output);
//fclose($handlefile);



?>

如您所见,我创建了一个 for 循环和两个 if 语句来“计算”单词之间的间距,当 counter 变量达到 3 时,插入一个换行符。但它不起作用,因为首先没有将网站上的数据打印到文本文件中。但是,如果我删除了 for 循环和 if 语句,当然没有排序,它就可以工作。 任何类型的帮助都可以得到!

编辑:更新代码。

编辑 2:最终工作版本。原始问题留待进一步参考。

这是最终的工作版本:

<?php
require "simple_html_dom.php";

$html = file_get_html("http://www.lipsum.com/");
$data = array();
$counter = 0;


foreach($html->find("div") as $tr){
    $row = array();
    foreach($tr->find("div") as $td){
        $row[] = $td->plaintext;
    }
     $data[] = $row;

    }


ob_start();
var_dump($data);
$handlefile = fopen("newfile.txt", "w") or die("Unable to open file!");
file_put_contents('newfile.txt', $data);
$output = ob_get_clean();
$outputFile = "newfile.txt";
fwrite($handlefile, $output);
fclose($handlefile);

function MakeFileReadable($source , $export) {

    $content = file_get_contents($source);
    $x = explode (" " , $content);

    $newx = "";
    $count = 1;
    foreach ($x as $word) {
        $newx .= $word . " ";
        if ($count %12 ==0) $newx .= "\r\n";
        $count ++;
    }

    $fp = fopen("file-export.txt" , 'w');
    if (!$fp) die("There is a problem with opening file...");
    fwrite($fp , $newx);
    fclose($fp);

}

MakeFileReadable("newfile.txt" , "file-export.txt");

?>

【问题讨论】:

  • 你在哪里设置了 $string 的值?它包含什么?

标签: php text-files


【解决方案1】:

使用一些数组函数

$string = "one two three four five six seven eight nine ten eleven tweleve thirteen fourteen";

$arr = explode (" " , $string);
$lines = array_chunk($arr,4);
foreach($lines as $line) 
   echo implode (" ", $line)."\r\n";

结果

one two three four
five six seven eight
nine ten eleven tweleve
thirteen fourteen

【讨论】:

  • 感谢您的回复。但是,我无法让它工作。只是为了澄清一下,我应该在我的代码中的哪个位置放置您的示例?
  • 这是更容易阅读的答案,尽管 chris85 的正则表达式非常优雅。 @bork 如果您将当前代码发布到 phpfiddle.org,我将为您检查您的代码
  • “\r\n”你现在可能已经想到了@bork,需要用“
    ”替换,只是想我会在这里说出来以作记录。
【解决方案2】:

这是一个正则表达式解决方案。

<?php
$test = 'one two three four five six seven eight nine ten eleven tweleve thirteen fourteen';
echo preg_replace('~((\w+\s){4})~', '$1' . "\n", $test);

输出:

one two three four 
five six seven eight 
nine ten eleven tweleve

\w 是一个单词字符(字母数字字符加“_”,http://en.wikipedia.org/wiki/Regular_expression),如果您只想要A-Z,请使用[a-z] 并使用i 修饰符使其不区分大小写,~((\w+\s){4})~i . \s 是一个空格,{4} 需要出现 4 次 \w+\s

根据您的代码...

$data = preg_replace('~((\w+\s){4})~', '$1' . "\n", $data);
file_put_contents('new_text_file.txt', $data);

http://php.net/manual/en/function.file-put-contents.php

每个更新的代码:

<?php
require "simple_html_dom.php";
$html = file_get_html("http://www.lipsum.com/");
$data = array();
$counter = 0;
foreach($html->find("div") as $tr){
    $row = array();
    foreach($tr->find("div") as $td){
        $row[] = $td->plaintext;
    }
    $data[] = $row;
}
$data = preg_replace('~((\w+\s){4})~', '$1' . "\n", implode(' ', $data));
file_put_contents('new_text_file.txt', $data, FILE_APPEND | LOCK_EX);

【讨论】:

  • 感谢您的回复,但我不太明白如何将其应用于文本文件的内容。
  • $string在哪里设置,是什么,文字内容?你想用newfile.txt 做什么,把字符串放在那里,内容被每四个字打断一次?
  • 我希望打印到文本文件的var_dump($data); 中的内容每隔四个单词就中断一次。
  • 抱歉,错过了您的回复。尝试了你的建议,它没有做任何事情。但我可能将代码 sn-p 放在错误的位置?我把它放在我的var_dump($data);下面
  • 这样$data 就会有正确的数据。您仍然需要输出,但是您将其保存到。我将使用file_put_contents 制作一个示例,演示如何将其放入新的文本文件中。
【解决方案3】:

最终测试代码:

    <?php
function MakeFileReadable($source , $export) {

    $content = file_get_contents($source);
    $x = explode (" " , $content);

    sort($x);
    $newx = "";
    $count = 1;
    foreach ($x as $word) {
        $newx .= $word . " ";
        if ($count %4 ==0) $newx .= "\r\n";
        $count ++;
    }

    $fp = fopen($export , 'w');
    if (!$fp) die("There is a problem with opening file...");
    fwrite($fp , $newx);
    fclose($fp);

}

MakeFileReadable("file-input.txt" , "file-export.txt");

【讨论】:

  • 感谢您的回复。但是,我无法让它发挥作用,它不会给我任何错误,但它也不会对文件中的数据进行排序。 (我删除了我的 for 和 if)
  • 您需要对单词进行排序吗?
  • 我已经为排序进行了编辑。在php.net/manual/en/function.sort.php中查看更多排序功能
  • 对不起,我的错误。我的意思是,它也不执行文件中的换行符。我真的不需要对数据进行排序,但无论如何谢谢。
  • 不是很不幸。我现在在$x = explode (" " , $content); 上遇到错误。 Undefined variable。我认为是 $x 造成的。
猜你喜欢
  • 1970-01-01
  • 2016-07-17
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 2011-04-17
  • 1970-01-01
相关资源
最近更新 更多