Конвертация txt таблицы в html
Вообщем столкнулся с проблемой. При помощи cgi получаю данные в табличном виде. Необходимо на странице отобразить их соответсвенно в таком же табличном ввиде (только в html).
Проблема в том, что между столбцами в этой таблицы пробелы (количество пробелов не равно разное соответсвенно, зависит от ширины столбца), так же пробелы встречаются в самих столбцах. Сколько будет столбцов и строк узнать заранее нельзя. Кроме извращенного парсинга можно что-то придумать? PID PGRP SID PRI STATE BLK SIZE COMMAND 82 81 1 10o RECV 14250 276K /usr/local/apache/bin/httpd start 83 81 1 10o REPLY 66 276K /usr/local/apache/bin/httpd start 5280 81 1 10o WAIT -1 28K /bin/sh -c ps 5282 81 1 10o REPLY 1 24K ps 8374 81 1 10o REPLY 66 276K /usr/local/apache/bin/httpd start |
если пробелы встречаются не только как разделители столбцов, но и в значении ячейки - то никак не распарсишь...
|
Именно в этом и проблема. Что пробелы есть и в значениях ячеек.
Плохо дело :( |
у вас пробелы встречаются только в последнем столбце, если я не ошибаюсь.
в чем проблема-то? отбираете 7 пар слово-пробелы, а восьмое слово, до конца строки отдельно /(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\ w*)\s*(.*)/ это регулярка как для ПХП.привожу, чтобы указать направление логики парсинга |
Цитата:
Как будет в реальности, нельзя сказать. |
проанализируйте первую строчку с загловками.
вычислите по сколько символов идет на каждый конкретный столбец и разделяйте следющие строки по стока символов но не сработает, если в заголовочной строке будут названия с пробелами. идей на этот счет не имею, но ситуация малораспространеная. во всяком случае можно обработать в соответствии с названиями |
gaiver,
а откуда в столбцах, кроме последнего, возьмутся пробелы? и это вывод какой команды? |
Это неважно. Есть вопрос, дан ответ.
|
я просто решил, что человек остался недоволен ответом
|
Конечно он недоволен. Но надо было сначала думать, прежде чем разбивать столбцы пробелами. Это как разломать комп нафиг а потом быть недовольным потому что не собрать обратно...
|
боюсь предположить, что это не он разбивал столбцы пробелами
|
Кому думать надо было? Разработчикам QNX 4.25? :)
Спасибо всем за отзывы, буду думать как решить проблему. |
Сомневаюсь что разработчики такой системы разбили таблицу пробелами. Наверняка там табы, ну или есть возможность указать тип разделителя...
|
Цитата:
2. Там не табы и нет возможности указать тип разделителя. |
ну тогда это действительно хреновые разработчики...
|
ZoNT,
мне кажется,обычно вывод в консоль форматируется именно пробелами. если я не прав, назовите пару команд форматируемых табами |
не назову, так как я нуб в *nix системах :)
Но это минус не в мою сторону, а в сторону разработчиков, согласись? |
Заменяете все последовательности в несколько пробелов на один.
Потом split(' ') Вуаля? P.S. прошу прощения, не поглядел, что пробелы бывают и в значениях ячеек. |
ну, я собсно говоря не вижу минуса
информационные команды в первую очередь предназначены для вывода в консоль для пользователя, чтоб он читал. и они это делают. с пробелами же экономится пространство по горизонтали ну и во вторых я высказал довольно неплохое решение, отталкиватся от числа символов в заголовочной части таблицы.это решение применимо для 99.9% команд так же как вариант, можно отталкиватся от заранее известных заголовков, но тогда надо для каждого типа таблицы свой набор сигнатур хранить.это применимо уже почти ко всем.может быть есть команды без заголовков в таблицах по моему оба эти решения вместе справятся для любых необходимых, заранее оперделенных таблиц а абсолютно для всех надо писать уже ИИ)))) А вообще формат вывода команд дело удобства, применения и идеологии. я не видел ни одной стандартной команды с выводом в консоль через табы. и в винде кстати тоже. но среди нестандартных вполне могут встречатся такие, там где это необходимо |
Цитата:
p.s. если ты нуб в *nix ситсемах, зачем же ты судишь о их разработчиках? |
никто не говорил что пробелы есть только в последнем столбце...
Цитата:
|
для такого "общего" случая решения не существует. В каждом конкретном случае возможно и можно что-то придумать. А общий случай можно реализовать за счет частных
кроме того, нигде не было сказано, что именно в этой команде пробелы могут присутствовать в каких-либо столбцах, кроме первого и в конце концов, ZoNT, что плохого в том, что команда выдает результат, который нельзя пропарсить? |
Пробегаем по всем строкам, смотрим в каких позициях пробелы имеются во всех строках, по этим позициям разбиваем все строки. Если строк много, можно для определения позиций взять первые/случайные n.
|
Цитата:
|
но ведь нельзя учесть все интересы. Всегда чем-то приходится пренебрегать. И если _действительно_ пренебрегли такой возможностью, это ничего не говорит о разработчиках системы ;-)
|
вот в данной теме человеку и понадобилось распарсить вывод... Пренебрегли, получается, его интересами...
|
Да все можно распарсить. О чем спор вообще? :)
|
колонки разделены пробелами и контент в ячейке может быть с пробелами, итого получаем в каждой строке разное кол-во слов. Итого: сколько у нас колонок и какие слова к какой относятся?
|
ZoNT,
Цитата:
Да даже все проще. Пробегаем первую строку, запоминаем позиции пробелов. Пробегаем вторую строку, из запомненных позиций сохраняем только те, в которых пробелы во второй строке, и т.д. Условием выхода из цикла может служить, например, неизменение количества позиций на протяжении n строк. |
Цитата:
|
Цитата:
а идеи решения проблемы авторы у тебя интересные ;-) |
Цитата:
1 первое слово второе недослово просто_слово 2 хрен в баночке 3 ну и тут тоже какая-то фигня написана 2 3 Напиши-ка алгоритм. |
Код:
1 первое слово второе недослово просто_слово |
Цитата:
|
Цитата:
|
ну вот тебе заголовок:
col first second third Теперь напиши парсер, который разнесёт правильно контент по столбцам. |
Цитата:
на этом сайте, кстати, похоже нельзя в сообщении такую таблицу продемонстрировать нормально - пробелы объединяются в один, а нет - можно |
Цитата:
Цитата:
|
Это пример, если ты его не можешь распарсить, то какие вопросы?
|
Код:
1 первое слово второе недослово просто_слово |
Часовой пояс GMT +3, время: 03:31. |