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 :: Помогите написать маленький парсер txt файла

 PHP.SU

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


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

> Без описания
android
Отправлено: 13 Февраля, 2012 - 19:57:29
Post Id


Посетитель


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


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




Здрасте, нужен парсер txt файла

В файл записывается такой тип данных...
test.txt:
Цитата:

{"other1_1", "other1_2", "other1_3"}
{"other2_1", "other2_2", "other2_3"}


нужно вывести последние 5 данных.

Типа
PHP:
скопировать код в буфер обмена
  1.  
  2. $i=0;
  3. foreach($in as $va) {
  4.  $i++;
  5.  echo $va[$i][1];
  6.  echo $va[$i][2];
  7.  echo $va[$i][3];
  8. }
 
 Top
Panoptik
Отправлено: 13 Февраля, 2012 - 20:13:05
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




что вы подразумеваете под данными? строку?
тогда будет так:
PHP:
скопировать код в буфер обмена
  1. $data=file('file.txt');
  2. $cnt = count($data);
  3. if($cnt<=5) {
  4.  for($i = 1; $i<=5; $i++) {
  5.    echo $data[$i];
  6.  }
  7. } else {
  8.  for($i = $cnt-5; $i<=$cnt; $i++) {
  9.   echo $data[$i];
  10.  }
  11. }


-----
Just do it
 
 Top
android
Отправлено: 13 Февраля, 2012 - 20:22:12
Post Id


Посетитель


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


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




Есть файл в нем данные записаны так

{"other1_1", "other1_2", "other1_3"}{"other2_1", "other2_2", "other2_3"} и тд...

нужно вывести 5 последних (те которые снизу) данных.

И нужно в цикле выбирать со строчки данные ячеек other1_1, other1_2, other1_3
 
 Top
Panoptik
Отправлено: 13 Февраля, 2012 - 20:23:45
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




(Отредактировано автором: 13 Февраля, 2012 - 20:24:13)



-----
Just do it
 
 Top
android
Отправлено: 13 Февраля, 2012 - 20:27:47
Post Id


Посетитель


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


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




Это что? Можете сделать это уже в скрипте?
(Добавление)
Panoptik мне нужно что бы выводилось так

echo "<tr><td>{$i}</td><td>{$...}</td><td>{$...}</td></tr>";
 
 Top
Panoptik
Отправлено: 13 Февраля, 2012 - 20:43:14
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




для пущей ясности нужно определить ваши данные
допустим у вас есть 6 записей вида {"данные1","данные2","данные3"}
тут один момент, что вам скорее всего данные нужны без фигурных скобок вокруг и разделены запятой. чтото мне это очень напоминает подобие csv-формата
если у вас каждая запись записывается в отдельную строку, то тут пригодится очень кстати функция file - которая выгребает весь файл в массив - где каждый элемент - это отдельная строка. следовательно вам нужно последних 5 элементов массива
итак достаем содержимое файла в массив:

достаем из этого массива последних 5 файлов:
PHP:
скопировать код в буфер обмена
  1. for($i=count($fd)-5; $i <=count($fd) ; $i++) {
  2.  //тут у нас есть возможность обращаться к каждой записи таким образом $fd[$i]
  3. }

убираем из записи фигурные скобки вначале и вконце

разбиваем получившуюся строку на отдельный части, по разделителю "," - запятая

еще можно убрать кавычки вокруг каждого значения - если таковые действительно имеют быть место
PHP:
скопировать код в буфер обмена
  1. foreach($data as $key => $val) {
  2. $data[$key] = substr($val,1,strlen($val)-2)
  3. }

делаем что угодно с полученными данными, обращаясь к ним как к элементам массива
PHP:
скопировать код в буфер обмена
  1. foreach($data as $val) {
  2.  //делаем что хотим
  3. }


соберите свой код из этого конструктора. при небольших усилиях мозга - это сделать не сложно

(Отредактировано автором: 13 Февраля, 2012 - 20:47:14)



-----
Just do it
 
 Top
android
Отправлено: 13 Февраля, 2012 - 21:13:32
Post Id


Посетитель


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. for($i=count($file)-5; $i <=count($file) ; $i++) {
  3.         $str = substr($file[$i], 1, strlen($file[$i])-2);
  4.         $data = explode(',', $str);
  5.                
  6.         foreach($data as $key => $val) {
  7.                 $data[$key] = substr($val, 1, strlen($val)-2);
  8.                
  9.                 foreach($data as $val) {
  10.                         echo $val[1].'<br/>';
  11.                 }
  12.  
  13.         }
  14. }
  15.  


Неработает
 
 Top
Panoptik
Отправлено: 13 Февраля, 2012 - 21:24:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




почти, только не нужно вставлять цикл в цикл. нужно последовательно их выполнять
PHP:
скопировать код в буфер обмена
  1. for($i=count($file)-5; $i <=count($file) ; $i++) {
  2.         $str = substr($file[$i], 1, strlen($file[$i])-2);
  3.         $data = explode(',', $str);
  4.                
  5.         foreach($data as $key => $val) {
  6.                 $data[$key] = substr($val, 1, strlen($val)-2);
  7.         }
  8.  
  9.         foreach($data as $val) {
  10.                 echo $val[1].'<br/>';
  11.         }
  12. }

или вот так всё в одном цикле
PHP:
скопировать код в буфер обмена
  1. for($i=count($file)-5; $i <=count($file) ; $i++) {
  2.         $str = substr($file[$i], 1, strlen($file[$i])-2);
  3.         $data = explode(',', $str);
  4.                
  5.         foreach($data as $key => $val) {
  6.                 $data[$key] = substr($val, 1, strlen($val)-2);
  7.                 echo $data[$key].'<br/>';
  8.         }
  9.  
  10.  
  11. }

(Отредактировано автором: 13 Февраля, 2012 - 21:27:05)



-----
Just do it
 
 Top
android
Отправлено: 13 Февраля, 2012 - 21:39:53
Post Id


Посетитель


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


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




Вот что выводит
Цитата:

t
o
o
t
o
o
t
o
o
t
o
o
t
o
o


Содержимое файла:

Цитата:

{"oth1","1oth1","0oth1"}
{"oth2","2oth2","9oth2"}
{"oth3","3oth3","8oth3"}
{"oth4","4oth4","7oth4"}
{"oth5","5oth5","6oth5"}
{"oth6","6oth6","5oth6"}
{"oth7","7oth7","4oth7"}
{"oth8","8oth8","3oth8"}
{"oth9","9oth9","2oth9"}
{"oth0","0oth0","1oth0"}


использовал:
PHP:
скопировать код в буфер обмена
  1. for($i=count($file)-5; $i <=count($file) ; $i++) {
  2.  
  3.         $str = substr($file[$i], 1, strlen($file[$i])-2);
  4.  
  5.         $data = explode(',', $str);
  6.  
  7.                
  8.  
  9.         foreach($data as $key => $val) {
  10.  
  11.                 $data[$key] = substr($val, 1, strlen($val)-2);
  12.  
  13.         }
  14.  
  15.  
  16.  
  17.         foreach($data as $val) {
  18.  
  19.                 echo $val[1].'<br/>';
  20.  
  21.         }
  22.  
  23. }
 
 Top
Panoptik
Отправлено: 13 Февраля, 2012 - 22:04:17
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




в конце уже не надо указывать индекс
просто выводите
echo $val."<br />";


-----
Just do it
 
 Top
EuGen Администратор
Отправлено: 14 Февраля, 2012 - 09:11:11
Post Id


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


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


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




PHP:
скопировать код в буфер обмена
  1. $rgData=array_map(function($sItem)
  2. {
  3.    preg_match_all('/"([^"{},]+)"/i', $sItem, $rgMatches);
  4.    return join(',',$rgMatches[1]);
  5. }, file('/path/to/file'));
  6. echo(join("<br/>\n", array_slice($rgData, -5)));

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
android
Отправлено: 14 Февраля, 2012 - 14:51:26
Post Id


Посетитель


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


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




Нужно выводить $v[1] это oth1, $v[2] это 1oth1 итд

{"oth1","1oth1","0oth1"}
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB