Как заменить строку в .txt файлах по их имени в php? - PullRequest
0 голосов
/ 04 марта 2020

У меня есть папка, содержащая несколько файлов .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_ | ТБ | CFEXK4-RC | 9353970294766 | 84,99

PRXC1_ | ТБ | CFEXK4-RC | 9353970294773 | 84,99

...

Я бы хотел, чтобы вы:

  • , если имя файла начинается с A500_, заменить "TB" на "MD"

  • , если имя файла начинается с A700_ заменить «TB» на «JB»

  • , если имя файла начинается с A900_, заменить «TB» на «LD»

Как сделать ты это делаешь?

<?php

$oldMessage = 'TB';
$NewMessage = 'MD';

//read the entire string
$str=file_get_contents('./test/A500_1.txt');

//replace something in the file string
$str=str_replace($oldMessage, $NewMessage,$str);

//write the entire string
file_put_contents('./test/A500_1.txt', $str);
echo "good !";

?>

1 Ответ

1 голос
/ 04 марта 2020

Сначала задайте путь к файлу переменной, например $path = './test/A500_1.txt';, затем извлеките имя файла с basename . Теперь у вас будет переменная для проверки по условию. Затем подумайте, что, поскольку вы будете выполнять это действие много раз, это должна быть функция, которую легко использовать повторно. Это должно выглядеть примерно так:

function processFile( $path ) {
    $filename = basename( $path );

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

    //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( $path, $str );

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

if(processFile( './test/A500_1.txt' )) echo "good!";

Отсюда, вероятно, будет хорошей идеей написать al oop, который перебирает все файлы, которые вы хотите обработать. scandir скорее всего то, что вы ищете. Затем снова используйте вашу новую функцию внутри этого l oop. Также обратите внимание, что я добавил проверку, чтобы убедиться, что запись в функции прошла успешно. Полезно не всегда предполагать, что файл может быть записан и явно проверять.

ОБНОВЛЕНИЕ: Пример синтаксиса l oop, так как вы спросили.

$files = scandir("./test/", 0);
foreach($files as $file)
{
    if(processFile( $file )) echo "$file is good!";
}


...