Перейти к содержимому

Фотография
- - - - -

Функция unserialize, создание из строки массива символов


  • Вы не можете создать новую тему
  • Закрытая тема Тема закрыта
Сообщений в теме: 3

#1 VladimirBuzin

VladimirBuzin

    Прохожий

    Топикстартер
  • Участник
  • 0
    6 сообщ.

Отправлено 18 Март 2018 в 13:02

Добрый день! Требуется в текстовом файле несколько последовательных одинаковых символов заменить одним. У меня была идея построчно считывать из первого файла, десериализовать считанную строку с помощью функции 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>

  • 0

Спонсор

#2 BaNru

BaNru

    Пацифизжу

  • суперМодератор
  • 1004
    3 630 сообщ.

Отправлено 18 Март 2018 в 17:04

А зачем эти усложнения жизни с построчными/посимвольными алгоритмами?
Почему нельзя str_replace() или preg_replace() использовать?
Если надо проверить "произошли ли изменения", то можно строку проверить по MD5, да и просто можно сравнить до и после.

Ну и читать записывать лучше через file_get/put_content()


  • 0

#3 VladimirBuzin

VladimirBuzin

    Прохожий

    Топикстартер
  • Участник
  • 0
    6 сообщ.

Отправлено 18 Март 2018 в 19:01

Почему сервер не смог создать файл? Укажите ошибки и напишите в комментариях, что нужно сделать на самом деле. Есть ли более эффективный алгоритм для моего задания?

Код HTML:

<html>
<title>Чтение из файла и запись в файл</title>
<body>
<form name="form1" action=reading_writing_file.php method=POST>
<h4>В текстовом файле требуется несколько последовательных одинаковых символов заменить одним.</h4>
Введите строку текста:<input type="text" size="100" name="stroka"><br>
<br>
<input type="submit" value="Жду ответа">
<br><br>
<input type="reset">
</form>
</body>
</html>

Код PHP:

<html>
<head>
<title>Работа с файлами в PHP</title>
</head>
<body>
<?PHP
$str=$_POST['stroka'];
//Запись в файл
$myfile_write = fopen("file1.txt", "w") or die("Не удалось создать файл!");
fwrite($myfile_write, $str);
fclose($myfile_write);
echo '<b>'. 'Текст первого файла:<br>'.'</b>';
//Чтение из файла
$stroka = file_get_contents("file1.txt");
echo $stroka;
echo '<b>'.'Текст второго файла:<br>'.'</b>';
$writing_file = fopen("file2.txt", "a") or die("Не удалось создать файл!");
$arr = str_split($stroka); //Создание из строки массива символов
for ($i=0; $i<count($arr); $i++) { //Проход в цикле по всем элементам созданного массива
if($arr[i] == $arr[I - 1]) { //Пропускаем итерацию цикла, если текущий элемент равен предыдущему
continue;
} else {
fwrite($writing_file, $arr[i]); } //В противном случае осуществляем посимвольную запись
}
fclose($writing_file);
echo file_get_contents("file2.txt");
?>
</body>
</html>

Я создал два текстовых файла и положил их в одну папку вместе с HTML-документом: C:\inetpub\wwwroot\file1.txt
В какую папку нужно класть, если используешь XAMPP, и почему мой компьютер не смог создать нужные файлы? Пожалуйста, исправьте ошибки!!!


  • 0

#4 BaNru

BaNru

    Пацифизжу

  • суперМодератор
  • 1004
    3 630 сообщ.

Отправлено 18 Март 2018 в 22:25

Добавь вначале документа вывод ошибок
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
?>
А в коде ниже удали DIE
$myfile_write = fopen("file1.txt", "w");
$writing_file = fopen("file2.txt", "a");
Так выведутся ошибки на чтение и запись файлов через fopen();
 
И непонятно, зачем ты используешь fopen и file_get_contents() одновременно.
Также в конце у тебя file_get_contents() - это чтение файла, а для записи надо использовать file_put_contents() Увидел, это контрольная проверка, но попробуй всё же писать через file_put_contents()
  • 0



Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение
Статистика

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей