Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конвертация txt таблицы в html (https://javascript.ru/forum/misc/2559-konvertaciya-txt-tablicy-v-html.html)

gaiver 15.01.2009 17:04

Конвертация 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

ZoNT 15.01.2009 17:10

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

gaiver 15.01.2009 17:25

Именно в этом и проблема. Что пробелы есть и в значениях ячеек.
Плохо дело :(

Gvozd 15.01.2009 17:37

у вас пробелы встречаются только в последнем столбце, если я не ошибаюсь.
в чем проблема-то?
отбираете 7 пар слово-пробелы, а восьмое слово, до конца строки отдельно
/(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\ w*)\s*(.*)/
это регулярка как для ПХП.привожу, чтобы указать направление логики парсинга

gaiver 15.01.2009 17:43

Цитата:

Сообщение от Gvozd (Сообщение 10763)
у вас пробелы встречаются только в последнем столбце, если я не ошибаюсь.
в чем проблема-то?
отбираете 7 пар слово-пробелы, а восьмое слово, до конца строки отдельно
/(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\ w*)\s*(.*)/
это регулярка как для ПХП.привожу, чтобы указать направление логики парсинга

эта таблица, просто частный пример, того как будут выглядеть данные (столбцы разделены пробелами, и в столбцах также могут присутствовать пробелы. Количество строк и столбцов неизвестно).
Как будет в реальности, нельзя сказать.

Gvozd 15.01.2009 17:55

проанализируйте первую строчку с загловками.
вычислите по сколько символов идет на каждый конкретный столбец
и разделяйте следющие строки по стока символов
но не сработает, если в заголовочной строке будут названия с пробелами.
идей на этот счет не имею, но ситуация малораспространеная.
во всяком случае можно обработать в соответствии с названиями

x-yuri 16.01.2009 11:35

gaiver,
а откуда в столбцах, кроме последнего, возьмутся пробелы? и это вывод какой команды?

ZoNT 16.01.2009 11:45

Это неважно. Есть вопрос, дан ответ.

x-yuri 16.01.2009 11:48

я просто решил, что человек остался недоволен ответом

ZoNT 16.01.2009 11:49

Конечно он недоволен. Но надо было сначала думать, прежде чем разбивать столбцы пробелами. Это как разломать комп нафиг а потом быть недовольным потому что не собрать обратно...

x-yuri 16.01.2009 12:03

боюсь предположить, что это не он разбивал столбцы пробелами

gaiver 16.01.2009 12:04

Кому думать надо было? Разработчикам QNX 4.25? :)
Спасибо всем за отзывы, буду думать как решить проблему.

ZoNT 16.01.2009 12:08

Сомневаюсь что разработчики такой системы разбили таблицу пробелами. Наверняка там табы, ну или есть возможность указать тип разделителя...

gaiver 16.01.2009 12:16

Цитата:

Сообщение от ZoNT (Сообщение 10807)
Сомневаюсь что разработчики такой системы разбили таблицу пробелами. Наверняка там табы, ну или есть возможность указать тип разделителя...

1. Да, они ее разбили пробелами.
2. Там не табы и нет возможности указать тип разделителя.

ZoNT 16.01.2009 12:36

ну тогда это действительно хреновые разработчики...

Gvozd 16.01.2009 12:43

ZoNT,
мне кажется,обычно вывод в консоль форматируется именно пробелами.
если я не прав, назовите пару команд форматируемых табами

ZoNT 16.01.2009 12:55

не назову, так как я нуб в *nix системах :)
Но это минус не в мою сторону, а в сторону разработчиков, согласись?

hogart 16.01.2009 13:11

Заменяете все последовательности в несколько пробелов на один.
Потом
split(' ')


Вуаля?

P.S. прошу прощения, не поглядел, что пробелы бывают и в значениях ячеек.

Gvozd 16.01.2009 13:16

ну, я собсно говоря не вижу минуса
информационные команды в первую очередь предназначены для вывода в консоль для пользователя, чтоб он читал. и они это делают.
с пробелами же экономится пространство по горизонтали
ну и во вторых я высказал довольно неплохое решение, отталкиватся от числа символов в заголовочной части таблицы.это решение применимо для 99.9% команд
так же как вариант, можно отталкиватся от заранее известных заголовков, но тогда надо для каждого типа таблицы свой набор сигнатур хранить.это применимо уже почти ко всем.может быть есть команды без заголовков в таблицах
по моему оба эти решения вместе справятся для любых необходимых, заранее оперделенных таблиц
а абсолютно для всех надо писать уже ИИ))))

А вообще формат вывода команд дело удобства, применения и идеологии.
я не видел ни одной стандартной команды с выводом в консоль через табы.
и в винде кстати тоже.
но среди нестандартных вполне могут встречатся такие, там где это необходимо

x-yuri 16.01.2009 15:59

Цитата:

не назову, так как я нуб в *nix системах
Но это минус не в мою сторону, а в сторону разработчиков, согласись?
ZoNT, командная строка и в виндоуз есть. Кроме того, вывод команды может быть не предназначен для того, чтобы его парсили. И еще, чем же плохо решение разбивать по пробелам, если пробелы могут быть только в последнем столбце?
p.s. если ты нуб в *nix ситсемах, зачем же ты судишь о их разработчиках?

ZoNT 16.01.2009 16:16

никто не говорил что пробелы есть только в последнем столбце...
Цитата:

Сообщение от gaiver
эта таблица, просто частный пример, того как будут выглядеть данные (столбцы разделены пробелами, и в столбцах также могут присутствовать пробелы. Количество строк и столбцов неизвестно).


x-yuri 16.01.2009 16:29

для такого "общего" случая решения не существует. В каждом конкретном случае возможно и можно что-то придумать. А общий случай можно реализовать за счет частных

кроме того, нигде не было сказано, что именно в этой команде пробелы могут присутствовать в каких-либо столбцах, кроме первого

и в конце концов, ZoNT, что плохого в том, что команда выдает результат, который нельзя пропарсить?

Kolyaj 16.01.2009 16:31

Пробегаем по всем строкам, смотрим в каких позициях пробелы имеются во всех строках, по этим позициям разбиваем все строки. Если строк много, можно для определения позиций взять первые/случайные n.

ZoNT 16.01.2009 16:32

Цитата:

Сообщение от x-yuri
и в конце концов, ZoNT, что плохого в том, что команда выдает результат, который нельзя пропарсить?

плохо в том, что вывод команды можно направить в файл и, например, смотреть файл по веб-интерфейсу распарсенным в табилчку если распарсить можно...

x-yuri 16.01.2009 16:36

но ведь нельзя учесть все интересы. Всегда чем-то приходится пренебрегать. И если _действительно_ пренебрегли такой возможностью, это ничего не говорит о разработчиках системы ;-)

ZoNT 16.01.2009 16:37

вот в данной теме человеку и понадобилось распарсить вывод... Пренебрегли, получается, его интересами...

Kolyaj 16.01.2009 16:39

Да все можно распарсить. О чем спор вообще? :)

ZoNT 16.01.2009 16:51

колонки разделены пробелами и контент в ячейке может быть с пробелами, итого получаем в каждой строке разное кол-во слов. Итого: сколько у нас колонок и какие слова к какой относятся?

Kolyaj 16.01.2009 16:53

ZoNT,
Цитата:

Сообщение от Kolyaj
Пробегаем по всем строкам, смотрим в каких позициях пробелы имеются во всех строках, по этим позициям разбиваем все строки.


Да даже все проще. Пробегаем первую строку, запоминаем позиции пробелов. Пробегаем вторую строку, из запомненных позиций сохраняем только те, в которых пробелы во второй строке, и т.д. Условием выхода из цикла может служить, например, неизменение количества позиций на протяжении n строк.

x-yuri 16.01.2009 16:55

Цитата:

вот в данной теме человеку и понадобилось распарсить вывод... Пренебрегли, получается, его интересами...
кто сказал, что в том конкретном выводе пробелы могут быть не только в последнем столбце?

x-yuri 16.01.2009 17:24

Цитата:

Да все можно распарсить. О чем спор вообще?
спор носит несколько философский характер: "как же сделать так, чтоб всем было хорошо"
а идеи решения проблемы авторы у тебя интересные ;-)

ZoNT 16.01.2009 17:34

Цитата:

Сообщение от Kolyaj (Сообщение 10849)
ZoNT,
Пробегаем первую строку, запоминаем позиции пробелов. Пробегаем вторую строку, из запомненных позиций сохраняем только те, в которых пробелы во второй строке, и т.д. Условием выхода из цикла может служить, например, неизменение количества позиций на протяжении n строк.

Ну вот строки:
1 первое слово второе недослово просто_слово
2 хрен в баночке
3 ну и тут тоже какая-то фигня написана 2 3

Напиши-ка алгоритм.

Kolyaj 16.01.2009 17:36

Код:

1 первое слово второе недослово просто_слово
2 хрен в баночке
3 ну и тут тоже какая-то фигня написана 2 3

Два столбца.

x-yuri 16.01.2009 17:38

Цитата:

Напиши-ка алгоритм.
где у тебя там столбцы?

ZoNT 16.01.2009 17:38

Цитата:

Сообщение от Kolyaj
Два столбца.

Фигасе, по логике видно что здесь 4 столбца...

ZoNT 16.01.2009 17:39

ну вот тебе заголовок:
col first second third

Теперь напиши парсер, который разнесёт правильно контент по столбцам.

x-yuri 16.01.2009 17:42

Цитата:

Фигасе, по логике видно что здесь 4 столбца...
по какой логике? не видел программ, которые так таблицы выводят, как ты ;-)
на этом сайте, кстати, похоже нельзя в сообщении такую таблицу продемонстрировать нормально - пробелы объединяются в один, а нет - можно

Kolyaj 16.01.2009 17:45

Цитата:

Сообщение от ZoNT
Фигасе, по логике видно что здесь 4 столбца...

Специально вывел моноширинным шрифтом. Не ощущаю 4-х столбцов.

Цитата:

Сообщение от ZoNT
ну вот тебе заголовок:
col first second third

Мне не нужен заголовок, мне контент нужен, в котором хотя бы человек поймет, что там столбцы (таблица-то человекочитаемая обсуждается).

ZoNT 16.01.2009 17:47

Это пример, если ты его не можешь распарсить, то какие вопросы?

x-yuri 16.01.2009 17:48

Код:

1 первое слово                          второе недослово просто_слово
2 хрен                                  в                баночке
3 ну и тут тоже какая-то фигня написана 2                3

вот здесь - 4 столбца


Часовой пояс GMT +3, время: 03:31.