如何格式化脚本

时间:2015-11-28 23:53:09

标签: php file-get-contents

我使用脚本从另一个关键字列表中排除单词列表。我想改变输出的格式。 (我在这个网站上找到了脚本,我做了一些修改。)

示例:

结果中的短语:我的话

我想添加引号:"我的话"

我在想我应该把结果放在new-file.txt中,之后重写它,但我不明白如何捕获结果。请,请给我一些提示。这是我的第一个剧本:)

以下是代码:

<?php
    $myfile = fopen("newfile1.txt", "w") or die("Unable to open file!");
    //    Open a file to write the changes - test
    $file = file_get_contents("test-action-write-a-doc-small.txt");
    //  In small.txt there are words that will be excluded from the big list  
    $searchstrings = file_get_contents("test-action-write-a-doc-full.txt");
    //  From this list the script is excluding the words that are in small.txt      
    $breakstrings = explode(',',$searchstrings);
    foreach ($breakstrings as $values){
      if(!strpos($file, $values)) {
        echo $values." = Not found;\n";
      } 
      else {
        echo $values." = Found; \n";
      }
    }
    echo "<h1>Outcome:</h1>";  
    foreach ($breakstrings as $values){
      if(!strpos($file, $values)) {
        echo $values."\n";
      } 
    }
    fwrite($myfile, $values); //    write the result in newfile1.txt - test

    //    a loop is missing?

    fclose($myfile); //    close newfile1.txt - test
?>   

脚本中也有一点错误。它工作正常但是在输入test-action-write-a-doc-full.txttest-action-write-a-doc-small.txt中的单词列表之前我必须为第一行设置一个中断,否则它找不到第一个单词。

示例:

test-action-write-a-doc-small.txt字词中:

  

选择,lol,文件,酷,

test-action-write-a-doc-full.txt wwords:

  

选择,坏,计算机,哈哈,休息,文件。

结果:

  

选择=未找到 - 这是错误。

如果我没有为.txt

中的第一行放假,就会发生这种情况
  

lol =发现

     

file = Found

提前感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

您可以收集数组中接受的单词,然后将所有这些数组元素粘贴到一个文本中,然后将其写入文件。像这样:

echo "<h1>Outcome:</h1>";  
// Build an array with accepted words
$keepWords = array();
foreach ($breakstrings as $values){
  // remove white space surrounding word
  $values = trim($values);
  // compare with false, and skip empty strings
  if ($values !== "" and false === strpos($file, $values)) {
    // Add word to end of array, you can add quotes if you want
    $keepWords[] = '"' . $values . '"';
  } 
}
// Glue all words together with commas
$keepText = implode(",", $keepWords);
// Write that to file
fwrite($myfile, $keepText);

请注意,您不应按照docs中的说明编写!strpos(..) false === strpos(..)

另请注意,这种在$file中搜索的方法可能会产生意外结果。例如,如果你的$file字符串中有“痛苦”字样,那么单词“is”(如果原始文件中用逗号分隔)将被拒绝,因为它在$ file中找到。您可能想要查看此内容。

关于第二个问题

如果没有先在文件中添加换行符,它就无法运行这一事实让我觉得它与许多UTF-8编码开头出现的Byte-Order Mark(BOM)有关文件。讨论了问题和可能的解决方案hereelsewhere

如果确实是这个问题,我建议有两种解决方案:

使用文本编辑器将文件保存为UTF-8,但没有BOM。例如,notepad++中有function removeBOM($str = "") { if (substr($str, 0,3) == pack("CCC",0xef,0xbb,0xbf)) { $str = substr($str, 3); } return $str; } 这种可能性。

或者,将其添加到您的代码中:

file_get_contents

然后使用该函数包装所有$file = removeBOM(file_get_contents("test-action-write-a-doc-small.txt")); // In small.txt there are words that will be excluded from the big list $searchstrings = removeBOM(file_get_contents("test-action-write-a-doc-full.txt")); // From this list the script is excluding the words that are in small.txt 次调用,如下所示:

int p;
x0=0, y0=0;
long double r, i;
cout<<"Enter c"<<endl;
cin>>r>>i;
for(int i= fx(-2); i<=fx(2); i++)
{
    for(int j= fy(-2); j>=fy(2); j--)
    {
        long double x=0.0, y= 0.0,t;
        x= gx(i), y= gy(j);
        int k= -1;

        while(( x*x + y*y <4)&& k<it-1)
        {
            t= x*x - y*y + r;
            y= 2*x*y + i ;
            x=t;
            k++;

        }
        p= k*pd;
        setcolor(COLOR(colour[p][0],colour[p][1],colour[p][2]));
        putpixel(i,j,getcolor());
    }
}

这将从文件中取出的字符串的开头删除这些有趣的字节。