Как выбрать заголовки из текстового файла

  • Автор темы Mahinator
  • Дата начала

Mahinator

Guest
Как выбрать заголовки из текстового файла

Написал скрипт:

PHP:
...
$r = file ("pr.txt"); //открываем текстовый файл
for ($g = 0; $g<count($r); $g++)
{
list ($q, $w, $e, $a, $s) = split('n:n', $r[$g]); //присваиваем каждой переменной значения из pr.txt, разделенные 'n:n'
print ("$q, $w, $e, $a, $s");
print ("<br>");

}
...
где pr.txt содержит примерно следующее:
281n:nMonitors CRTn:nn:nn:n
282n:n15" LG StudioWorks 505E (1024x768@67Hz,0.23mm(H),0.27mm)n:n101,00n:nописаниеn:nдополнительная инфа
283n:n15" Samsung 591S(1024x768@68Hz,0.24mm)n:n103,00n:nописаниеn:nдополнительная инфа
284n:n17" LG Flatron F720P (1920x1440@65Hz,0.24mm)n:n168,00n:nописаниеn:nдополнительная инфа
285n:n17" LG Flatron T710PH (1600x1200@68Hz,0.25mm(V),0.20mm(H))n:n152,00n:nописаниеn:nдополнительная инфа
290n:nMonitors LCDn:nn:nn:n
291n:n15" CTX S500AB Black (1024x768,400:1,250кд/кв.м,speakers)n:n269,00n:nописаниеn:nдополнительная инфа
292n:n15" CTX S521A Silver-Black (1024x768,400:1,250кд/кв.м,speakers)n:n275,00n:nописаниеn:nдополнительная инфа
293n:n15" CTX S550 Ivory (1024x768,400:1,250кд/кв.м,speakers)n:n251,00n:nописаниеn:nдополнительная инфа


запускаем...выдает следующее:
281, Monitors CRT, , ,
282, 15" LG StudioWorks 505E (1024x768@67Hz,0.23mm(H),0.27mm), 101,00, описание, дополнительная инфа
283, 15" Samsung 591S(1024x768@68Hz,0.24mm), 103,00, описание, дополнительная инфа
284, 17" LG Flatron F720P (1920x1440@65Hz,0.24mm), 168,00, описание, дополнительная инфа
285, 17" LG Flatron T710PH (1600x1200@68Hz,0.25mm(V),0.20mm(H)), 152,00, описание, дополнительная инфа
290, Monitors LCD, , ,
291, 15" CTX S500AB Black (1024x768,400:1,250кд/кв.м,speakers), 269,00, описание, дополнительная инфа
292, 15" CTX S521A Silver-Black (1024x768,400:1,250кд/кв.м,speakers), 275,00, описание, дополнительная инфа
293, 15" CTX S550 Ivory (1024x768,400:1,250кд/кв.м,speakers), 251,00, описание, дополнительная инфа


Подскажите, в какой области думать, чтоб из полученного результата можно было выводить только заголовки, в данном случае это
281, Monitors CRT, , , и 290, Monitors LCD, , ,

Знаю, что нада воспользоваться тем, что в этих строках переменные $e, $a, $s принимают значение _
Заранее спасибо!
 

Фанат

oncle terrible
Команда форума
ты способен словами описатьто, что ты называешь словом "заголовки"?
 

Фанат

oncle terrible
Команда форума
словами.
не жестами, а словами.
чем отличаются заголовки от другого текста
 

Mahinator

Guest
Автор оригинала: Фанат
словами.
не жестами, а словами.
чем отличаются заголовки от другого текста
Подробно:
Это "кусок" из прайса товаров из екселя.
Строка заголовков - это раздел прайса, остальные строки - содержание раздела.
отличаются они тем, что
в заголовке переменной $q присвоен номер строки, $w - название, А ОСТАЛНЫЕ ПЕРЕМЕННЫЕ ИМЕЮТ ЗНАЧЕНИЯ _ (пробел). В строке содержание - нет переменных, которые имеют значение _ (пробел). На основании этого отличия я и хочу получить возможность, чтоб Php выводил только заголовки, анализируя разницу между заголовками и содержанием
 

Фанат

oncle terrible
Команда форума
и что тебе не ясно?
синтаксис оператора if или оператора сравнения == ?
 

Mahinator

Guest
Работа с циклами для выбора строк из файла

Люди!!! Подскажите, я в том направлении мыслю или нет. Никак не могу наладить скрип. Мож то как я делаю ваще не к месту. Гляньте плиз:
Смысл:

При отображении целеком всего прайса всё прекрасно:
PHP:
$r = file ("pr.txt"); //открываем текстовый файл
/*      Содержание файла pr.txt:
1n:nCasen:nn:nn:n
2n:nATX 116-4JA+ ATX 300W - PIVn:n25,50n:nописаниеn:nдополнительная инфа
3n:nATX 152-4JA+ ATX 300W - PIVn:n25,50n:nописаниеn:nдополнительная инфа
4n:nATX 221-4JA+ ATX 300W - PIVn:n25,50n:nописаниеn:nдополнительная инфа
5n:nATX 223-4JA+ ATX 300W - PIVn:n25,50n:nописаниеn:nдополнительная инфа
15n:nCD-Driven:nn:nn:n
16n:nCD-ReWriter Asus 52x32x52n:n36,00n:nописаниеn:nдополнительная инфа
17n:nCD-ReWriter LiteOn 52x32x52n:n31,00n:nописаниеn:nдополнительная инфа
18n:nCD-ROM Asus 52xn:n19,00n:nописаниеn:nдополнительная инфа
25n:nCoolern:nn:nn:n     */

for ($g = 0; $g<count($r); $g++)
{
list ($q, $w, $e, $a, $s) = split('n:n', $r[$g]);
  if ($e == "")
     {
             print ("<b>$w</b><br>");
     }
  if ($e !="")
      {
              print ("$q - $w - $e $<br>");
      }
}
/* скрипт выведет следующее:
Case
2 - ATX 116-4JA+ ATX 300W - PIV - 25,50 $
3 - ATX 152-4JA+ ATX 300W - PIV - 25,50 $
4 - ATX 221-4JA+ ATX 300W - PIV - 25,50 $
5 - ATX 223-4JA+ ATX 300W - PIV - 25,50 $
CD-Drive
16 - CD-ReWriter Asus 52x32x52 - 36,00 $
17 - CD-ReWriter LiteOn 52x32x52 - 31,00 $
18 - CD-ROM Asus 52x - 19,00 $
Cooler */
Но хочется чтоб было так:
В цикле программа просматривает строки файла. Если в колонке с ценой не пусто – это товар, и его надо вывести на экран. Если же пусто – это начало следующего раздела прайса, и обработку надо прекратить, так как цель достигнута – весь выбранный посетителем раздел выведен на экран.

Для этого делаю так:
PHP:
$r = file ("pr.txt"); //открываем текстовый файл


for ($g = 0; $g<count($r); $g++)
{
list ($q, $w, $e, $a, $s) = split('n:n', $r[$g]);

   if ($e == "" and $w == "case")
   {
           do
           {
                   print ("$w - $e");
           }
           while ($w == "CD-Drive");
   }
   if ($e == "" and $w == "CD-Drive")
   {
           do
           {
                   print ("$w - $e");
           }
           while ($w == "Cooler");
   }
}
В браузер выдает только: CD-Drive -
 

Фанат

oncle terrible
Команда форума
Mahinator
ты так и будешь каждую неделю вспоминая о своей задаче, начинать каждый раз новый топик, забывая всё ,что тебе сказали в старом?
 

Mahinator

Guest
Автор оригинала: Фанат
Mahinator
ты так и будешь каждую неделю вспоминая о своей задаче, начинать каждый раз новый топик, забывая всё ,что тебе сказали в старом?
Извенияюсь, по одной задаче новый топик но с разными вопросами буду писать не буду.
За то что мне сказали огромное спасибо, Особенно тебе! :D
 

Фанат

oncle terrible
Команда форума
какие у тебя ещё разные вопросы?
у тебя как был вывод заголовков - так и остался.

что за фигню ты нагородил в своём коде?
что за вайлы не понятные?
тебе там нужен ОДИН if
если цена равна нулю - принт
 

Mahinator

Guest
Автор оригинала: Фанат

что за фигню ты нагородил в своём коде?
что за вайлы не понятные?
тебе там нужен ОДИН if
если цена равна нулю - принт
если оставить ОДИН иф, то выведется весь прайс.
А я хотел, чтоб можно былоб напечатать, например только корпуса или только сд-румы, поетому "нагородил" вайлы, но :(, не получается...
 

Фанат

oncle terrible
Команда форума
понятно.
тебе надо выводить содержимое раздела.

тебе нужно всего две команды: continue и break
и два ифа.
в своём цикле for сначала проверяешь, первым ифом - если раздел не соответствует нужному или переменная $temp не равна 1, то continue
следующим ифом проверяешь - если переменная $temp равна один, и раздел поменялся - то break

и всё
 

hussar

In code we trust!
Попробую объяснить! Тебе здесь про это уже давноговорят!
У тебя, то что ты называешь заголовками, такие же как и другие записи, НО они отличаются тем что заполнена только первая позиция, а между остальными запятыми пробелы. Так все что тебе нужно это пройтись циклом по файлу и при каждой итерации цикла проверять имеет ли строка первое поле заполненное, а остальные пустые. Если ДА то это заголовок, нет идешь дальше!

Ну вот, долго отвечал, получилось не в тему :(
 
Сверху