С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 29.03.2016
Сообщений: 48

Удаление данных из одного файла и добавление в другой

12.06.2019, 08:58. Показов 1694. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста. наткнулся на проблему: есть txt файл в котором находятся данные, есть код который выводит все данные на экран, добавляю после каждой строки 2 кнопки:
PHP
1
2
3
$text = file('file2.txt'); 
foreach($text as $t) {echo $t."<form method='POST'><input type='submit' value='правильно' name='truee[]'>
<input type='submit' value='неправильно' name='falsee[]'></form>";}
теперь нужно сделать так, что бы когда нажимал на кнопку "правильно" то эту строку добавлял на другой файл, а если нажать на "неправильно", то удалять с 1 файла эту строку
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.06.2019, 08:58
Ответы с готовыми решениями:

Добавление данных из одного datagridview в другой
Добрый день. Делаю своеобразный интернет-магазин с использованием c#. Есть 2 datagridview. Первый выступает в качестве каталога товаров,...

Добавление текста из одного файла в другой батником
Добрый день, подскажите, есть два файла с логами - нужно их объединить в один. Как это можно сделать при помощи батника?

Добавление текста из одного текстового файла в другой
Задание: Даны два текстовых файла. Добавить в конец первого файла содержимое второго, а в конец второго файла - содержимое первого файла....

6
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
14.06.2019, 01:10
Если не нужно искать позицию строки в файле, тоесть файл состоит из одной строки, то по идее так:
PHP
1
2
3
4
5
6
7
8
9
10
11
if (isset($_POST['truee'])) {put_content();}
if (isset($_POST['falsee'])){del_content();}
function  put_content() 
{
  file_put_contents('имя и путь к файлу куда записать',$t);  // запишет в файл строку $t
}
function del_content()
{
  $t1='';   // заменяем строку пустым значением
  file_put_contents('file2.txt',$t1)
}
Ну а если нужно искать строку в файле, то в функции добавления-удаления добавить поиск позиции strpos.
А если удалять строку из массива, то unset
1
0 / 0 / 0
Регистрация: 29.03.2016
Сообщений: 48
14.06.2019, 12:19  [ТС]
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Если не нужно искать позицию строки в файле, тоесть файл состоит из одной строки, то по идее так:
PHP
1
2
3
4
5
6
7
8
9
10
11
if (isset($_POST['truee'])) {put_content();}
if (isset($_POST['falsee'])){del_content();}
function  put_content() 
{
  file_put_contents('имя и путь к файлу куда записать',$t);  // запишет в файл строку $t
}
function del_content()
{
  $t1='';   // заменяем строку пустым значением
  file_put_contents('file2.txt',$t1)
}
Ну а если нужно искать строку в файле, то в функции добавления-удаления добавить поиск позиции strpos.
А если удалять строку из массива, то unset
функция del_content() удалила все строки в файле, а не именно эту строку
file_put_contents('file.txt',$t) так ведь? написал так и тоже все строки удалились с файла и не записался
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
14.06.2019, 16:26
Лучший ответ Сообщение было отмечено Oltirem как решение

Решение

Цитата Сообщение от Oltirem Посмотреть сообщение
функция del_content() удалила все строки в файле, а не именно эту строку
file_put_contents('file.txt',$t) так ведь? написал так и тоже все строки удалились с файла и не записался
Так я потому и сказал:
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Если не нужно искать позицию строки в файле, тоесть файл состоит из одной строки, то по идее так:
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Ну а если нужно искать строку в файле, то в функции добавления-удаления добавить поиск позиции strpos.
А если удалять строку из массива, то unset
Ну а то, что
Цитата Сообщение от Oltirem Посмотреть сообщение
file_put_contents('file.txt',$t) так ведь? написал так и тоже все строки удалились с файла и не записался
У вас по какой-то причине переменная $t оказалось пустой. Вот он пустоту и записал. Поскольку я не знаю остальных подробностей вашего файла, то скорее всего проблема из-за области видимости. Пропишите в функции put_content() global $t.
И учтите, если все же удалять нужно именно из массива, то unset удаляет именно виртуально из массива, в исходном файле строка остается. Ну а strpos можно сразу на str_replace заменить.

Добавлено через 3 часа 5 минут
Прочитал внимательно ваше первое сообщение. У вас там неточность, которая впоследствии приведет к тому, что работать будете только с последней строкой массива. Соответственно все решение чуток по-другому будет
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
$text = file('file2.txt'); 
foreach($text as $key=>$t) 
  {
    echo $t."<form method='POST'><input type='submit' value='правильно' name='truee[$key]'>
<input type='submit' value='неправильно' name='falsee[$key]'></form>";
   }
// проверка нажатия клавиши "правильно"
$tkey['$key']='';
if (isset($_POST['truee']))
{
   foreach ($_POST['truee'] as $key=>$val)
   {
      if (isset($tkey[$key])) {$tkey[$key]=$val;}
   }
   put_content();
}
// проверка нажатия клавиши "неправильно"
$fkey['$key']='';
if (isset($_POST['falsee']))
{
   foreach ($_POST['falsee'] as $key=>$val)
   {
      if (isset($fkey[$key])) {$fkey[$key]=$val;}
   }
   del_content();
}
function  put_content()
{
global $text; 
global $key; 
  echo $text[$key];  // это просто проверка ту ли строку хотите вписать, её можно закоментировать
  file_put_contents('file.txt',$text[$key]);
}
function del_content()
{
 global $text; 
global $key; 
echo "хочу удалить  '".$text[$key]."'из файла";  // это просто проверка ту ли строку хотите удалить, её можно закоментировать
  $t1='';   // строка с пустым значением для замены
   $replace=str_replace($text[$key],$t1,file_get_contents('file2.txt'));
  file_put_contents('file2.txt',$replace);
}
И чтобы правильно вписать в новый файл правильную строку, нужно понимать куда именно вы хотите вписать и сделать проверку по аналогии с функцией удаления строки, только скорее всего правильнее было бы использовать не str_replace а preg_replace. Допустим вам нужно вставить между двумя словами "ogo" и "molodec". Тогда функция на запись правильной строки будет выглядеть так:
PHP
1
2
3
4
5
6
7
8
9
function  put_content()
{
global $text; 
global $key; 
  echo $text[$key];  // это просто проверка ту ли строку хотите вписать, её можно закоментировать
$prav=file_get_contents('file.txt');
$prav=preg_replace('/(ogo)(.*)(molodec)/','$1'.$text[$key].'$3',$prav);
  file_put_contents('file.txt',$prav);
}
Ну а уже от условий вставки остается совсем чуть чуть подрихтовать
1
0 / 0 / 0
Регистрация: 29.03.2016
Сообщений: 48
14.06.2019, 19:51  [ТС]
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Так я потому и сказал:


Ну а то, что
У вас по какой-то причине переменная $t оказалось пустой. Вот он пустоту и записал. Поскольку я не знаю остальных подробностей вашего файла, то скорее всего проблема из-за области видимости. Пропишите в функции put_content() global $t.
И учтите, если все же удалять нужно именно из массива, то unset удаляет именно виртуально из массива, в исходном файле строка остается. Ну а strpos можно сразу на str_replace заменить.

Добавлено через 3 часа 5 минут
Прочитал внимательно ваше первое сообщение. У вас там неточность, которая впоследствии приведет к тому, что работать будете только с последней строкой массива. Соответственно все решение чуток по-другому будет
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
$text = file('file2.txt'); 
foreach($text as $key=>$t) 
  {
    echo $t."<form method='POST'><input type='submit' value='правильно' name='truee[$key]'>
<input type='submit' value='неправильно' name='falsee[$key]'></form>";
   }
// проверка нажатия клавиши "правильно"
$tkey['$key']='';
if (isset($_POST['truee']))
{
   foreach ($_POST['truee'] as $key=>$val)
   {
      if (isset($tkey[$key])) {$tkey[$key]=$val;}
   }
   put_content();
}
// проверка нажатия клавиши "неправильно"
$fkey['$key']='';
if (isset($_POST['falsee']))
{
   foreach ($_POST['falsee'] as $key=>$val)
   {
      if (isset($fkey[$key])) {$fkey[$key]=$val;}
   }
   del_content();
}
function  put_content()
{
global $text; 
global $key; 
  echo $text[$key];  // это просто проверка ту ли строку хотите вписать, её можно закоментировать
  file_put_contents('file.txt',$text[$key]);
}
function del_content()
{
 global $text; 
global $key; 
echo "хочу удалить  '".$text[$key]."'из файла";  // это просто проверка ту ли строку хотите удалить, её можно закоментировать
  $t1='';   // строка с пустым значением для замены
   $replace=str_replace($text[$key],$t1,file_get_contents('file2.txt'));
  file_put_contents('file2.txt',$replace);
}
И чтобы правильно вписать в новый файл правильную строку, нужно понимать куда именно вы хотите вписать и сделать проверку по аналогии с функцией удаления строки, только скорее всего правильнее было бы использовать не str_replace а preg_replace. Допустим вам нужно вставить между двумя словами "ogo" и "molodec". Тогда функция на запись правильной строки будет выглядеть так:
PHP
1
2
3
4
5
6
7
8
9
function  put_content()
{
global $text; 
global $key; 
  echo $text[$key];  // это просто проверка ту ли строку хотите вписать, её можно закоментировать
$prav=file_get_contents('file.txt');
$prav=preg_replace('/(ogo)(.*)(molodec)/','$1'.$text[$key].'$3',$prav);
  file_put_contents('file.txt',$prav);
}
Ну а уже от условий вставки остается совсем чуть чуть подрихтовать
удаление работает на отлично. а насчет записи в другой файл, нужно просто вписать строку в конце файла(file.txt)
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
15.06.2019, 00:15
Цитата Сообщение от Oltirem Посмотреть сообщение
удаление работает на отлично. а насчет записи в другой файл, нужно просто вписать строку в конце файла(file.txt)
Здается мне, что вы студент ))) и у вас летняя сессия, а это домашнее задание ))) учится нужно, а не списывать )))
На самом деле, то что вам нужно - ещё проще
PHP
1
2
3
4
5
6
7
function  put_content()
{
global $text; 
global $key; 
  echo $text[$key];  // это просто проверка ту ли строку хотите вписать, её можно закоментировать
  file_put_contents('file.txt',$text[$key],FILE_APPEND); // этот ключ добавляет инфу новой строкой в конец файла
}
Обо всем этом можно прочитать в примерах Мануала.
https://www.php.net/manual/ru/ref.filesystem.php
https://www.php.net/manual/ru/book.strings.php
Читайте, учитесь. Ато препод спросит, как работает проверка нажатия кнопки, и почему она именно в таком виде (а её можно записать в более длинном виде), ну или ещё что-нибудь, и что вы ответите? ))))
1
0 / 0 / 0
Регистрация: 29.03.2016
Сообщений: 48
15.06.2019, 08:37  [ТС]
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Здается мне, что вы студент ))) и у вас летняя сессия, а это домашнее задание ))) учится нужно, а не списывать )))
На самом деле, то что вам нужно - ещё проще
PHP
1
2
3
4
5
6
7
function  put_content()
{
global $text; 
global $key; 
  echo $text[$key];  // это просто проверка ту ли строку хотите вписать, её можно закоментировать
  file_put_contents('file.txt',$text[$key],FILE_APPEND); // этот ключ добавляет инфу новой строкой в конец файла
}
Обо всем этом можно прочитать в примерах Мануала.
https://www.php.net/manual/ru/ref.filesystem.php
https://www.php.net/manual/ru/book.strings.php
Читайте, учитесь. Ато препод спросит, как работает проверка нажатия кнопки, и почему она именно в таком виде (а её можно записать в более длинном виде), ну или ещё что-нибудь, и что вы ответите? ))))
Спасибо огромное! Объясню как-нибудь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.06.2019, 08:37
Помогаю со студенческими работами здесь

Автоматическое добавление данных из одного листа на другой с накоплением истории
Здравствуйте. Смастерил тут макрос, с вашей помощью. Функция такая что при появлении данных на первом листе, происходит проверка на...

Перенос данных из одного файла в другой
День добрый! Помогите решить задачу! Условие: &quot;Сформировать файл, содержащий записи по результатам сдачи очередного экзамена...

Копирование данных из одного файла в другой
Написать программу, которая копирует данные из одного файла в другой, но при этом меняет каждый третий символ на латинский символ X на С++

Передача данных из одного файла в другой
Помогите разобраться, как правильно(!) передавать переменные, массивы и т.д., объявленные в одном файле, в другой, чтобы с ними можно было...

Подстановка данных из одного файла в другой
Прикрепляю файл с заданием... офис 2007 я не очень хорошо знаю иксель... буду рад любой помощи


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru