Привет друзья! Я читаю папку, в которой у меня много текстовых файлов на PHP, и мне нужно удалить все пробелы в начале каждого абзаца в текстовом файле. Но когда я читаю файл и пытаюсь удалить пробел, он не работает, как я пытался ОТДЕЛКА функция LTRIM а также попробовал REGEX «/ \ S + $ /» но все не работают. Но когда я использую REGEX это «/ \ S + /» вместо «/ \ S + $ /» его удаление всех пробелов. Мне нужно только удалить пробел в начале абзаца, любая помощь, пожалуйста … Ниже мой код, который я пытаюсь ..
if ($dh = opendir($folder_path)){
while (($file = readdir($dh)) !== false) {
$path_parts = pathinfo($file);
if ($path_parts['extension'] === 'txt' && $file1 = fopen($folder_path . '/' . $file, "r")) {
$cleanStr ="";
while(!feof($file1)) {
$line = trim(fgets($file1));
if ( trim($line)!="" ){
$str = preg_replace("/\s+$/", " ", ltrim($line));
echo $str;die;
}
}
}
}
echo "Process finished..." . PHP_EOL;
closedir($dh);
}
использование /^\s+/
чтобы соответствовать пробелам в начале абзаца. Например.
$str = preg_replace("/^\s+/", "", $line);
Я использовал что-то вроде этого пару лет назад для аналогичной задачи — казалось, работало нормально, возможно, это могло бы быть полезным — хотя, если вы не хотите редактировать файл, а не использовать file_put_contents
просто echo implode(PHP_EOL, $content );
<?php
/* find all files in chosen folder */
$col=glob( $folder_path . '\*.*' );
/* filter only text files for processing */
$col=preg_grep( '@(\.txt$)@i', $col );
/* Proceed if there are text files only */
if( !empty( $col ) ){
/* iterate through collection */
foreach( $col as $index => $filepath ){
/* read file contents into an array */
$lines=file( $filepath );
/* store altered lines in temp array */
$content=array();
/* trim the start of each line & store into temp array */
foreach( $lines as $line )if( !empty( $line ) )$content[]=ltrim( $line );
/* write content back to file */
file_put_contents( $filepath, implode( PHP_EOL, $data ) );
}
echo "finito!";
}
?>
Тестовый скрипт использовал один текстовый файл с именем lorem.txt
со следующим содержанием.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque suscipit lacus massa, in malesuada quam consectetur at. Proin fermentum augue vel purus pellentesque placerat. Nunc tincidunt mi ac est varius, id euismod est auctor. Mauris facilisis luctus justo tristique consectetur. Vestibulum tempus lacinia blandit. Praesent dui metus, aliquet ut velit vitae, suscipit volutpat tortor. Nunc dictum nunc sed nisi bibendum dictum id vitae lorem. Donec viverra eget odio in hendrerit. Mauris iaculis at eros at scelerisque. Suspendisse a consequat erat, in fringilla diam. Fusce vitae hendrerit lacus. Ut sed purus vel metus semper sagittis. Ut fermentum magna quis tempus scelerisque.
Phasellus quis rhoncus sapien. Nulla bibendum sagittis metus. Praesent elementum ex augue, a ullamcorper velit consectetur in. Maecenas mollis neque eu massa feugiat rutrum. Sed eu aliquam nulla. Sed sit amet egestas eros. Donec commodo leo in pellentesque efficitur. Cras ornare dui iaculis ultricies lobortis. Vivamus vel tellus maximus, sodales odio quis, ultrices metus.
Nullam vitae rhoncus justo, a congue turpis. Nulla facilisi. Nulla faucibus massa et arcu molestie dignissim. Maecenas aliquet posuere eros sit amet vehicula. Praesent quis arcu eros. Quisque vitae dictum orci. Integer quis mollis felis.
Morbi vitae risus fringilla, ornare ipsum ac, tincidunt metus. Ut ac eros placerat, auctor metus non, sollicitudin metus. Aenean malesuada gravida dolor, sit amet blandit lacus dignissim at. In egestas nibh felis, pulvinar laoreet eros rhoncus quis. Donec pulvinar condimentum ex, quis faucibus massa placerat sed. Fusce in mattis sem, sed rutrum nibh. Donec vitae risus urna. Suspendisse potenti. Maecenas vitae neque tempus, malesuada dolor et, rhoncus orci.
Duis quis augue vitae sapien cursus suscipit. Nulla rutrum eget diam in feugiat. Vestibulum posuere dapibus nisl at laoreet. Donec ante arcu, euismod et finibus ut, malesuada sed augue. Nunc porttitor leo ex, eget luctus augue sollicitudin non. Proin nec cursus ipsum. Nulla mi enim, finibus a felis vitae, pharetra tempor tortor. Proin a arcu lectus.
Большинство из приведенных выше строк имеют пробелы или символы табуляции в начале
<?php
$folder_path='c:/wwwroot/content/stack';
$trim='rtrim';/* find all files in chosen folder */
$col=glob( $folder_path . '\*.*' );
/* filter only text files for processing */
$col=preg_grep( '@(\.txt$)@i', $col );
/* Proceed if there are text files only */
if( !empty( $col ) && count( $col ) > 0 ){
/* iterate through collection */
foreach( $col as $index => $filepath ){
/* read file contents into an array */
$lines=file( $filepath );
/* store altered lines in temp array */
$content=array();
/* trim the start of each line & store into temp array */
foreach( $lines as $line )if( !empty( $line ) ){
$content[]=$trim( $line );
}
/* write content back to file */
#file_put_contents( $filepath, implode( PHP_EOL, $data ) );
echo "<pre>" . implode( PHP_EOL, $content ) . "</pre>";
}
printf( "finito! %d files processed",count( $col ) );
} else {
echo "nothing to process";
}
?>
Просто изменив переменную $trim
от rtrim
в ltrim
выход как и ожидалось
Следующий код изменяет исходный файл (не знаю, является ли это проблемой) и был запущен из cmdline — все пробелы в начале строк удаляются.
<?php
$folder_path='c:/wwwroot/content/stack';/* find all files in chosen folder */
$col=glob( $folder_path . '\*.*' );
/* filter only text files for processing */
$col=preg_grep( '@(\.txt$)@i', $col );
/* Proceed if there are text files only */
if( !empty( $col ) && count( $col ) > 0 ){
/* iterate through collection */
foreach( $col as $index => $filepath ){
/* read file contents into an array */
$lines=file( $filepath );
/* store altered lines in temp array */
$content=array();
/* trim the start of each line & store into temp array */
foreach( $lines as $line )if( !empty( $line ) ) $content[]=ltrim( $line );/* output file contents */
file_put_contents( $filepath, implode( PHP_EOL, $content ) );
echo file_get_contents( $filepath ) . PHP_EOL . PHP_EOL;
}
printf( "finito! %d files processed",count( $col ) );
} else {
echo "nothing to process";
}
?>