Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2018, 18:47   #1
VolodyaBuzin
Пользователь
 
Регистрация: 10.11.2017
Сообщений: 56
По умолчанию Посимвольная запись в файл, ошибка создания файла

Добрый день! Требуется в текстовом файле несколько последовательных одинаковых символов заменить одним. У меня была идея построчно считывать из первого файла, десериализовать считанную строку с помощью функции unserialize (разбить её на массив символов), в цикле пройтись по элементам полученного массива и, если текущий элемент равен предыдущему, пропускать итерацию цикла, в противном случае осуществлять посимвольную запись с помощью функции fwrite. Почему сервер не смог создать файл? Укажите ошибки и напишите в комментариях, что нужно сделать на самом деле. Есть ли более эффективный алгоритм для моего задания?

Код 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, и почему мой компьютер не смог создать нужные файлы? Пожалуйста, исправьте ошибки!!!
VolodyaBuzin вне форума Ответить с цитированием
Старый 19.03.2018, 11:17   #2
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от VolodyaBuzin Посмотреть сообщение
десериализовать считанную строку с помощью функции unserialize (разбить её на массив символов)
Зачем ? К строке можно обращаться по индексам, как к обычному массиву.

Цитата:
Сообщение от VolodyaBuzin Посмотреть сообщение
если текущий элемент равен предыдущему, пропускать итерацию цикла
Если текущий элемент НЕ равен предыдущему - добавить этот символ к новой строке. Разве так не проще, чем посимвольная запись ?

Вот на коленке собрал:
Код:
$file_input=fopen('filename_input','rt');
$output_str='';
while ($current_str=fgets($file_input))
{
	$new_str='';
	for ($i=1;$i<count($current_str);$i++)
		if ($current_str[$i]!=$current_str[$i-1])
			$new_str.=$current_str[$i];
	if ($new_str!='')
		$output_str.=$new_str.'\n';
}
fclose($file_input);
if ($output_str!='')
{
	$file_output=fopen('filename_output','wt');
	fwrite($file_output,$output_str);
}
Но это для быстрой работы. Если речь о больших объёмах файлов - то принцип тот же, но читать и писать строки придётся одновременно.
Что касается не смог создать файл - смотрите логи, может прав нет, или до функции ресурс не доходит.


UPD: можно не только писать всё одним вызовом fwrite, можно и читать так же (file_get_contents). Но тогда будет массив строк (split/explode).
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 19.03.2018 в 11:21.
OmegaBerkut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из текстового файла и обработка посимвольная дмитрий12123 Паскаль, Turbo Pascal, PascalABC.NET 22 03.10.2012 23:52
Ошибка создания устройства после чтения параметров из файла. Sargonass Gamedev - cоздание игр: Unity, OpenGL, DirectX 10 14.01.2012 16:37
файл целых чисел с функциями создания и печати файла NickolayNest Общие вопросы C/C++ 5 19.12.2011 05:35
Чтение из файла - запись в файл VaLenOK007 Помощь студентам 1 14.10.2011 06:58
Запись из файла в файл Atheist92 Паскаль, Turbo Pascal, PascalABC.NET 2 15.05.2011 17:23