0

我试图在“=”之后更改文本文件中的值,explode 返回一个包含两个元素的数组,我希望将第二个元素替换为新值,然后写入我的文件中,但是我迷失了语法! !

 $trID_Log_File = $fileName;
 if(file_exists($trID_Log_File) && filesize($trID_Log_File) > 0) 
   {    
    $h = fopen($trID_Log_File, "r");
    $contents = fread($h, filesize($trID_Log_File));
    fclose($h);

    if(!stristr($contents, "TrID is best suited to analyze binary files!")) 
    {

        $lines = explode("\n", $contents);
        foreach($lines as $line) 
        {
            if(strlen($line) > 5) 
            {
                $line_arr=explode("=",$line);

                                    if ($line_arr[0]=='Sally')
                                    {
                  $line_arr[1]="10"; // The New Value // ??????
                                       fwrite($h,$line_arr,"w+")     ; // ?????????
                                   }
            }
                 }
     }
   }

输入 :

sally= 10
samy=40

所需的输出:

sally=55
samy=123 

这个问题的正确语法是什么!我错过了一些代码吗?谢谢

4

2 回答 2

0

这是一个工作代码:

<?php
if(file_exists($trID_Log_File) && filesize($trID_Log_File) > 0)  {    
  $h = fopen($trID_Log_File, "r");
  $contents = fread($h, filesize($trID_Log_File));
  fclose($h);
  $out_h = fopen("output filename", "w");    
  if(!stristr($contents, "TrID is best suited to analyze binary files!")) {
    $lines = explode("\n", $contents);
    foreach($lines as $line) {
      if(strlen($line) > 5) {
        $line_arr=explode("=",$line);      
        if ($line_arr[0]=='Sally') {
          $line_arr[1]="10"; // The New Value 
        }
        fwrite($out_h, implode("=", $line_arr)."\n"); 
      }
    }
  }
}

您的代码中有几个错误。首先,您尝试将数组写入文件,但您应该使用implode函数将其转换回带=分隔符的字符串。

其次,你使用fwrite完全错误。此函数的第一个参数必须是打开的文件处理程序,但您已经传递了关闭的处理程序。第二个参数必须是要写入的字符串,您已经传递了一个数组。第三个可选参数是长度,但是你传递了“w+”,这对 fwrite 没有任何意义。fwrite 无法打开文件,因此它不能与文件访问修饰符一起使用。

第三,您不能就地修改文件来实现您的任务。如果必须这样做,则必须将文件光标设置为每行的开头,然后用新内容覆盖该行。而如果新行的长度不等于旧行的长度,就变得很复杂了。因此,您应该创建另一个输出文件并将所有输出写入其中。

我发布的代码中还有一些其他问题:

  • 这不适用于大文件。如果应该这样做,则不得将整个文件加载到内存中。使用 读取一行fgets,对其进行处理,将其写入新文件,然后读取下一行。
  • 不包含 'Sally' 的行将不会包含在输出文件中。您可能想要更改此行为。

另外,我没有检查stristr条件,所以我不知道它是否有效。

所有这些都与语法无关。如果有任何语法错误,解释器会非常具体地告诉您。

于 2012-11-18T09:18:02.780 回答
-1
if(strlen($line) > 5) {
$line_arr=explode("=",$line);

if ($line_arr[0]=='Sally'){
    $line_arr[1]="10"; // The New Value // ??????
    $new_line = implode("=", $line_arr); //reconstruct the string here
    // or something like that :
    // $new_line = $line_arr[0] . "=10";
    fwrite($h,$new_line)     ; // ?????????
}
}

在写入文件之前在您的阵列上使用 implode。如果没有,您正在尝试将数组写入文件......您必须在之前重建字符串!

于 2012-11-18T09:04:08.250 回答