VladimirBuzin
Member
- Регистрация
- 18.03.2018
- Сообщения
- 19
Добрый день! Требуется в текстовом файле несколько последовательных одинаковых символов заменить одним. У меня была идея построчно считывать из первого файла, десериализовать считанную строку с помощью функции unserialize (разбить её на массив символов), в цикле пройтись по элементам полученного массива и, если текущий элемент равен предыдущему, пропускать итерацию цикла, в противном случае осуществлять посимвольную запись с помощью функции fwrite. Поможет ли здесь функция unserialize, или можно составить более эффективный алгоритм? Подскажите пожалуйста, кто уже решал эту задачу.
Код:
<html>
<head>
<title>Работа с файлами в PHP</title>
</head>
<body>
<?PHP
$str=$_POST['tekst'];
//Запись в файл
$myfile_write = fopen("file1.txt", 'w') or die("Не удалось создать файл!");
file_put_contents($myfile_write, $str, LOCK_EX);
fclose($myfile_write);
echo '<b>'. 'Текст первого файла:<br>'.'</b>';
//Чтение из файла
$myfile_read = fopen("file1.txt", 'r') or die("Не удалось открыть файл!");
while (!feof($myfile_read)) {
$line = fgets($myfile_read);
echo $line;
}
fclose($myfile_read);
echo '<b>'.'Текст второго файла:<br>'.'</b>';
$reading_file = fopen("file1.txt", 'r') or die("Не удалось открыть файл!");
$writing_file = fopen("file2.txt", 'a') or die("Не удалось создать файл!");
while (!feof($reading_file)) {
$stroka = fgets($myfile_read); //Построчное чтение
$arr = unserialize($stroka); //Создание из строки массива символов
for ($i=0; $i<count($arr); $i++) { //Проход в цикле по всем элементам созданного массива
if($arr[i] == $arr[I - 1]) { //Пропускаем итерацию цикла, если текущий элемент равен предыдущему
continue;
} else {
fwrite($writing_file, $arr[i]); } //В противном случае осуществляем посимвольную запись
}
}
fclose($writing_file);
fclose($reading_file);
$open_read_file = fopen("file2.txt", 'r') or die("Не удалось открыть файл!");
while (!feof($open_read_file)) {
$string = fgets($open_read_file);
echo $string;
}
fclose($open_read_file);
?>
</body>
</html>