Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Подскажите как сделать

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Axiles
Отправлено: 13 Января, 2010 - 10:39:54
Post Id


Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




есть файл "bd.txt"
в него пишутся данные в формате:
ххх#yyy#zzz
ххх#yyy#zzz
# это разделитель
данные ххх - принемают только два значения, либо 1 либо 2, в первоначальном
виде все ххх = 1
Мне необходимо при чтении некоторые ххх заменить на 2
Как мне это реализоать. У меня есть несколько идей, но
реализация их мне видется достаточно сложными путями.
Может подскажите какое нибудь простое решение?
 
 Top
EuGen Администратор
Отправлено: 13 Января, 2010 - 10:42:25
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Если файл небольшой, то можно использовать http://php.su/functions/?fgetcsv - просто и понятно. В цикле обработаете данные, запишете в новый файл (или куда там требуется).
Если большой - читайте построчно: http://php.su/functions/?fgets


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
JustUserR
Отправлено: 13 Января, 2010 - 12:15:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Axiles Только не забывайте данные кодировать чтобы в них не встретился разделитель и не испортил всю вашу базу


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Axiles
Отправлено: 27 Января, 2010 - 06:43:54
Post Id


Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Я наверно не совсем точно сформулировал вопрос. Мне надо чтобы скрипт некоторые ххх заменял на 2, тоесть перезаписывал. Не писал в новый файл, а именно в этом файле, именно в этой строке перезаписал.
Вот.
 
 Top
valenok Модератор
Отправлено: 27 Января, 2010 - 09:18:20
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Читаете файл, меняете данные, записываете в файл.
Попробуйте, и если не получится, напишите что именно не получилось и почему не получилось по Вашему мнению, а мы поможем.


-----
Truly yours, Sasha.
 
My status
 Top
JustUserR
Отправлено: 27 Января, 2010 - 12:20:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Axiles пишет:
Не писал в новый файл, а именно в этом файле, именно в этой строке перезаписал
Для больший файлов бывает быстрее и удобнее создать новый файл и потом его переименовать и удалить старый (Кстати так действует механизм работы с файлами в Perl) В принципе можете и перезаписывать построчно но тогда используйте fseek для навигации по файлу
А еще лучше воспользоваться БД или XML-файлом для которых уже есть множество обработчиков для решения в том числе и вашей задачи


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Axiles
Отправлено: 01 Февраля, 2010 - 12:09:33
Post Id


Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




valenok пишет:
Попробуйте, и если не получится, напишите что именно не получилось и почему не получилось по Вашему мнению, а мы поможем.


вот код

PHP:
скопировать код в буфер обмена
  1.  
  2. $idd = $HTTP_POST_VARS ['id'];
  3.   $save = fopen ( "bd.txt", 'r+' );
  4.   $x=0;
  5.   while ($x==0)
  6.   {
  7.     $save2 = fgets ( $save, 1024 );
  8.     list($admk,$kl,$datetime,$text,) = explode("###",$save2);
  9.     if ($idd==$datetime)
  10.      {        
  11.        $admk="ok";
  12.        $save2 = "$admk###$kl###$datetime###$text \r\n";
  13.        fputs ( $save, $save2 );      
  14.        $x = 1;
  15.     }
  16.     else
  17.     if (!$save2)
  18.     {        
  19.       $x = 1;
  20.     }
  21.   }
  22.   fclose($save);
  23.  


еси токрыть файл "bd.txt", 'r+' то пишет в начало, а ест 'а+' то в конец а мне надо:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. ok###n###09.01.2010-18:13:17###текст
  3. ok###r###09.01.2010-18:15:36###текст
  4. ok###a###09.01.2010-18:16:46###текст
  5. ok###n###12.01.2010-11:11:16###текст
  6. ok###r###12.01.2010-11:43:59###текст
  7. ok###a###12.01.2010-14:16:33###текст
  8. ok###a###13.01.2010-09:54:34###текст
  9. no###n###13.01.2010-11:06:08###текст
  10. ok###a###13.01.2010-11:06:15###текст
  11. no###r###13.01.2010-11:06:20###текст
  12.  


заменить "no" на "ok" оставив хронологический порядок
 
 Top
JustUserR
Отправлено: 01 Февраля, 2010 - 13:13:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Axiles К сожалению так просто у вас не получится - дело в том что функция fputs просто так не станет писать строку в середину файла хоть и в заданную позицию - как вариант можно использовать сначала открытие файла в двоичном режиме (С помощью fopen("filename","a+b") и потом читать и писать его побайтово - например функциями fread и fwrite с указанием количества точных байт для записи - а перемещать указатель по файлу всегда можно с помощью fseek
Однако более удобным решением было бы использовать подоход *типа* Perl - вы обрабатываете файл на ходу и записываете данные в новый файл с помощью обычного fputs - а потом старый файл просто удаляете Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
biperch
Отправлено: 01 Февраля, 2010 - 17:53:49
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




Зачем морочится, просто, построчно прочитать файл загнать эти строки в массив (порядок и хронология сохраняется), обрабатываем строку как нам надо(разбираем ее манипулируем и тд). После работы с данными по порядку с массива все пишем в файл(перезаписываем имеющийся, к примеру). как прочитали так и записали порядок сохранен
 
 Top
JustUserR
Отправлено: 01 Февраля, 2010 - 18:09:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




biperch В массив не влезет если файл большой а это способ универсальный и проверенный


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB