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]   

> Без описания
GoDr
Отправлено: 26 Августа, 2015 - 19:12:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


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




Всё голову сломал, никак не могу понять логику...
в общем есть структурированный текстовый файл
CODE (htmlphp):
скопировать код в буфер обмена
  1. Version 0.8.3
  2.     02.06.2015
  3.         + Добавлено....
  4.         + Добавлено....
  5.         ~ Исправлено....
  6.         - Удалено......
  7.     01.06.2015
  8.         + Добавлено....
  9.         ~ Исправлено....
  10.         ~ Исправлено....
  11.         - Удалено......
  12.     Files:
  13.         \com\b\b.class.php
  14.         \com\b\s.php
  15. Version 0.8.2
  16.     02.05.2015
  17.         + Добавлено....
  18.         + Добавлено....
  19.         ~ Исправлено....
  20.         - Удалено......
  21.     01.05.2015
  22.         + Добавлено....
  23.         ~ Исправлено....
  24.         ~ Исправлено....
  25.         - Удалено......
  26.     Files:
  27.         \com\v\b.class.php
  28.         \com\v\s.php


Необходимо получить массив подобной структуры
CODE (htmlphp):
скопировать код в буфер обмена
  1.     [0.8.3] => Array(
  2.         [02.06.2015] => Array(
  3.             [0] => '+ Добавлено....'
  4.             [1] => '+ Добавлено....'
  5.             [2] => '~ Исправлено....'
  6.             [3] => '- Удалено......'
  7.         )
  8.         [01.06.2015] => Array(
  9.             [0] => '+ Добавлено....'
  10.             [1] => '~ Исправлено....'
  11.             [2] => '~ Исправлено....'
  12.             [3] => '- Удалено......'
  13.         )
  14.         [files] => Array(
  15.             [0] => '\com\b\b.class.php'
  16.             [1] => '\com\b\s.php'
  17.         )
  18.     )
  19.     [0.8.2] ....и т.д. и т.п....
  20. )
  21.  


свои варианты не предлагаю дабы не запутать и не навязать свою логику

(Отредактировано автором: 26 Августа, 2015 - 19:13:11)



-----
Система управления веб-содержимым Lotos CMS
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Августа, 2015 - 20:46:36
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




git
 
 Top
GoDr
Отправлено: 26 Августа, 2015 - 21:07:47
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


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




что git?


-----
Система управления веб-содержимым Lotos CMS
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Августа, 2015 - 21:18:22
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Делает все то что ты себе велосипедишь, и даже больше.
 
 Top
GoDr
Отправлено: 26 Августа, 2015 - 21:24:36
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


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




да пусть делает.. Я его не трогаю Радость Я знаю что такое GIT и мне не нужны ни его возможности ни RSS ни Atom и т.п

Это обычный текстовый файл, типа файла отчёта, лога, ну или что-то такое, т.е. лист только того что нужно. У меня стоит задача перегнать именно такой текстовый файл в массив Закатив глазки

PS
понятно что в репозитории можно найти всё, но нужно это Улыбка
(Добавление)
Пробовал регуляркой разбить единый файл, но есть пара проблем.. Во-первых, что-то какие-то глюки у preg_split с кодировкой крайнего символа при возврате результата (там кириллица). Во-вторых, из структуры малость выпадает раздел Files.

Есть идея сначала преобразовать в JSON-формат, но опять возникла проблема со структурой.. Наверное "глаза замозолил" и не могу найти ошибку...


-----
Система управления веб-содержимым Lotos CMS
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Августа, 2015 - 21:58:47
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Ищи по токену: "Version N.N.N", в нем ожидай токены "dd.mm.yyyy", "Files:", а внутри "dd.mm.yyyy" будут "+", "-" и "~".
Ну или еще тупее -- по кол-ву отступов определяй кто в кого вложен, т.к. порядок описания (сверху вниз) у тебя типа правильный.
 
 Top
GoDr
Отправлено: 26 Августа, 2015 - 22:07:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


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




да логику то я понял Улыбка
ладно, сейчас попробую сверстать что надумал и которое как-то не очень работает.. и выложу, может ошибку найдёте..


-----
Система управления веб-содержимым Lotos CMS
 
 Top
andrewkard
Отправлено: 27 Августа, 2015 - 15:05:56
Post Id


Участник


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


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




GoDr
Решил написать:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $arr = array();
  4. $key_secondary = false;
  5.  
  6. if($fh = fopen("test.txt","r")){
  7.     while (!feof($fh)){
  8.         $str =  trim(fgets($fh,9999));
  9.         //Если есть Version, пишем первичный ключ
  10.         if (strpos($str,'Version') !== false){
  11.             $key_primary = $str;
  12.         }
  13.         //Если есть вторичный ключ но строка не дата, не  Files и не Version
  14.         if ($key_secondary && !preg_match("/\d{2}\.\d{2}\.\d{4}/", $str) &&
  15.             strpos($str,'Files:') === false && strpos($str,'Version') === false){
  16.                 //пишем в массив
  17.                 $arr[$key_primary][$key_secondary][]=$str;
  18.         }
  19.         //Если строка дата или Files, пишем вторичный ключ
  20.         if (preg_match("/\d{2}\.\d{2}\.\d{4}/", $str) || strpos($str,'Files:') !== false){
  21.             $key_secondary = $str;
  22.         }
  23.     }
  24.     fclose($fh);
  25. }
  26. echo '<pre>';
  27. print_r($arr);
  28.  
 
 Top
GoDr
Отправлено: 27 Августа, 2015 - 16:32:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


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




почти работает Хорошо
есть маленькие проблемки...

CODE (htmlphp):
скопировать код в буфер обмена
  1.     [Version 0.8.3] => Array
  2.         (
  3.             [19.08.2015] => Array
  4.                 (
  5.                     [0] =>
  6.                 )
  7.  
  8.             [02.06.2015] => Array
  9.                 (
  10.                     [0] => ~ Исправленою.....
  11.                     [1] =>
  12.                     [2] => Files
  13.                     [3] => \components\c\b.class.php
  14.                     [4] => \components\c\b.php
  15.                     [5] => \components\c\b.tools.php
  16.                     [6] => \components\c\pn.php
  17.                     [7] => \inc\version.php
  18.                     [8] => \listchanges.log
  19.                     [9] =>
  20.                 )
  21.  
  22.         )
  23.  

- первый массив (дата) берётся из предыдущей версии
- пустые массивы
- раздел Files вложен в массив даты


PS
оставлю на потом, надоело голову ломать ... Пройдёт пара дней и решение само придёт Улыбка

(Отредактировано автором: 27 Августа, 2015 - 16:33:40)



-----
Система управления веб-содержимым Lotos CMS
 
 Top
andrewkard
Отправлено: 27 Августа, 2015 - 17:27:19
Post Id


Участник


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


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




GoDr пишет:
есть маленькие проблемки...

Данные то отличаются. Те же Files без двоеточия.
 
 Top
GoDr
Отправлено: 27 Августа, 2015 - 20:30:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


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




извиняюсь ... не заметил нюансы..
Проверю чуть позже... Но всё же я за регулярку.. нужно не "===" а всё таки "=="


-----
Система управления веб-содержимым Lotos CMS
 
 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