我如何在一个文件夹中编辑多个不同名称的.txt文件?

问题描述 投票:0回答:1

我有一个包含几个名为.txt的文件的文件夹:

A500_1.txt

A500_2.txt

A700_1.txt

A700_2.txt

A900_1.txt

...

在每个.txt文件中都有:

PRXC1_|TB|CCAAO9-RC|9353970324463|24.99

PRXC1_|TB|CFEXK4-RC|9353970294766|84.99

PRXC1_|TB|CFEXK4-RC|9353970294773|84.99

...

我希望你:

  • 如果文件名以A500_开头,则将“ TB”替换为“ MD”

  • 如果文件名以A700开头,请用“ JB”替换“ TB”

  • 如果文件名发送者代码在此处用A900_替换,则将“ TB”替换为“ LD”

我编写了此函数,但它只是在项目的根目录下创建了一个空的A500_2.TXT文件,并显示:

Warning: file_get_contents(A500_2.TXT): failed to open stream:

我的错误在哪里?

<?php

function processFile( $path ) {

   $dir    = './test/';
   $allFiles = scandir($dir);

   foreach($allFiles as $file) {

       $filename = basename( $file );

        if ( ! in_array($file,array(".","..")))
      { 

       //read the entire string
       $str = file_get_contents( $file );

       // var_dump($str);

       // replace something in the file string
       if ( strpos( $filename, 'A500_' ) === 0 ) {

           $str = str_replace( 'TB', 'MD', $str );

       } else if ( strpos( $filename, 'A700_' ) === 0 ) {

           $str = str_replace( 'TB', 'JB', $str );

       } else if ( strpos( $filename, 'A900_' ) === 0 ) {

           $str = str_replace( 'TB', 'LD', $str );

       } else {
           // Return false if we don't know what to do with this file
           return false;
       }

       //write the entire string    
       $writeResult = file_put_contents( $file, $str );

       //return true after a file is written successfully, or false on failure
       return $writeResult >= 0;

  }
  }
}

if(processFile( './test/' )) echo "good!";
?>
php file-get-contents str-replace
1个回答
0
投票

file_get_contents警告和正在创建的空白文件都归因于同一问题-scandir返回只是文件名,而不是当前正在运行的脚本的相对路径。

我猜您期望它返回相对路径,这就是为什么在循环顶部调用basename的原因。实际上,您的$file$filename参数将始终设置为同一对象。

最快的解决方案是在处理其他任何事情之前,先在$file之前加上扫描的目录名称:

$file = $dir . $file;

这应该同时解决读写调用。

© www.soinside.com 2019 - 2024. All rights reserved.