![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
как имея обычный dat файл перевести его в cvs? в дат файле информация содержится как бы в виде таблицы, только все разделено пробелами, а нужно соответственно разделять к какой колонке какая информация принадлежит?! хотела регулярное выражение взять с пробелами, но там есть слова, разделенные пробелами в одной колонке. как быть?! cvs файл - это такой же, только поля разделены запятыми.
т.е. дан файл
??? Добавлено через 1 минуту и 43 секунды немного неправильно отобразилось, реально одинаковые колонки начинаются с одинакового числа символов от начала строки. визуально их можно различить... |
|||
|
||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Да хотя бы так(примерно):
CVS и CSV - разные вещи. Тебе нжен именно CSV(comma separated values) Токенайзер - самое простое и ручное. Добавлено через 13 минут и 5 секунд Погляди ещё Это Это И просто кучу других ![]() Это сообщение отредактировал(а) chief39 - 24.9.2007, 17:14 -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
я же не могу весь файл расписать через StringTokenizer, чтобы запятые вставить, проще тогда от руки их прописать, нет?!
Добавлено через 1 минуту и 16 секунд кстати, да csv! |
|||
|
||||
_Y_ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Делить по пробелам это, что называется, некорректная задача. Комп он глупый и сам не знает (и никогда не узнает) что какой пробел означает. Правильно ли я понял, что каждая колонка занимает строго определенное количество символов? Тогда что-то вроде этого:
ЗЫ: Это примерно и не претендует на оптимальность. ЗЫЫ: Понятное дело, что в этом случае текст, содержащийся в колонках, не должен включать запятых. Иначе опять получаем некорректную задачу, только теперь с запятыми, а не с пробелами ![]() Это сообщение отредактировал(а) _Y_ - 25.9.2007, 11:36 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||
|
|||||
Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
да, только там таких полей порядка 50 и колонки все разные по размеру!!!!
![]() получается, это единственный вариант, который будет работать только для этого файла?! |
|||
|
||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Упустил насчёт того, что пробелами всё(CSV только в глаза попалось по диагонали...) Valeria, тогда без вариантов - ты и сама-то сможешь различить только отступами. Тогда - задание жёстких отступов, как Y советует.
Ты не поняла ![]() Добавлено через 1 минуту и 23 секунды Сделай массив(лучше коллекцию) с размерами полей. Можешь передавать параметрами этот набор размеров - прога станет конфигуримой. Изменится размер одного поля - изменяешь этот параметр - и погнали -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
_Y_ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Ну я же самый простой вариант дал. ![]()
Как вариант - чтобы не считать число знаков вручную - сделать GUI, который бы:
![]() -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||
|
|||||
Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
спасибо всем. написала программу
![]() |
|||
|
||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Работает намана?
![]() -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
работает нормально с массивом, но на файле, который я сама создала в качестве примера. а вот на том файле, что мне прислали не идет, т.к. он очень большой, там порядка 50 полей а реально я насчитала 28, но и с ними не заработало.
и у меня так же есть файл, описывающий число полей и их размер, не знаю, как он мне может пригодится? вообщем, пишу американцу, что ничего не получилось... |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Valeria, почему не получилось? Задача ведь тивиальная. Может стОит показать публике реальные фаилы?
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
ну реальный файл очень большой, примерно две строки выглядят так 264 и 265
в описании там написано 06 SEQNUM PIC S9(10). 06 HISTSEQNUM PIC S9(10). 06 NAME PIC X(60). 06 PHONE1 PIC X(32). и так далее.... как это использовать, не знаю?! просто число полей и сколько они должны в памяти места занимать. я когда массив чисел писала, просто посчитала число колонок в файле и позицию каждой колонки. я думаю вряд ли тут что можно придумать еще... ![]() Добавлено через 2 минуты и 34 секунды это кстати описание в Кобол, вообще есть и java типа "GRN" CHAR(10) NOT NULL WITH DEFAULT '' , |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
dat файлы не имеют стандартного формата. Каждое приложение, создающее dat, использует свой формат и только оно и может нормально его читать. Вам надо прочитать файл побайтно и понять его структуру, какие байты используются для разделения колонок (возможно не только пробелы), какие для переноса строки. Потом уже решать как конвертировать.
|
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
А у меня возникла вот такая идея, основанная на предположении, что у Вас колонки фиксированной ширины (число символов в колонке) и разделены пробелами.
Идея: Пробелы, разделяющие колоноки находятся в каждой строке в одних и тех же положениях. Надо пройти весь файл два раза:
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
_Y_,ну с пробелами хуже, т.к. одно поле может содержать несколько слов?! т.е. эти пробелы надо пропускать, но их нельзя определить. поэтому проще было искать положение колонок по словам, но к сожалению они не все заполнены.
Добавлено через 2 минуты и 53 секунды кстати, некоторые колонки не содержат пробелов, а идут подряд .... |
|||
|
||||
chief39 |
|
||||||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Так. Теперь спокойно и по порядку. Там 50 или 28? Если насчитала 28 а там должнобыть 50 - тогда звонок мериканцу - "ПОДРОБНЕЕ! что в том файле и как! Сколько СИМВОЛОВ на какое поле?"
Размер полей - В СИМВОЛАХ? Уточняй у америки Пиши то, что я выше сказал.
Совсем хреново ![]() Тебе нужна чёткая спецификация этого файла, иначе будешь читать хз что. Тот, кто формирует файл - должен чётко обозначивать его формат "до копейки". Иначе - это всё танцы с бубном наобум. Игры разума... ![]() "Это же не наши методы!" Тут чёткий файл, зачем гадать и бояться спросить формат? ![]() А допуская ситуацию, когда в неком поле попадётся некое типичное дефол значение типа "STD. FORMAT" - получим новую колонку и начнётся полный пердимонокль ![]() Лера, труси из мерикоса чёткий ФОРМАТ ФАЙЛА!!! До одного места сколько и сего там в памяти, БД, лукошке, етц - ТЫ ЧИТАЕШЬ ИЗ ФАЙЛА(!), поэтому тебе нужен ЧЁТКИЙ ФОРМАТ ФАЙЛА от производителя этого самого файла. Всё остальное - извращения. И не вздумай писать ему всякую .... типа , а то минус влеплю ![]() Не посрами отечество ![]() -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
||||||
|
|||||||
_Y_ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
В "огромном" файле вероятность того, что во всех строках, в одной колонке, разделяющий слова пробел будет находиться на одном и том же месте (или в остальных колонках слова будут очень короткими и на соответствующем месте будут дополняющие пробелы), крайне мала. Но, конечно, абсолютную уверенность дает только страховой полис. Поэтому можно несколько строчек каждого преобразованного файла стОит посмотреть глазами. Как я понял из Ваших данных, у Вас заполнены все колонки в каждой строке (или почти все). В этом случае Вы легко заметите ошибку пробежав глазами только пару первух строчек. Добавлено через 7 минут и 52 секунды
К сожалению, танцы с бубном - обычное дело. Я много сталкивался с тем, что надо прочитать файлы данных, созданные софтом, который уже давно в истории, фирма его писавшая пала жертвой империализма, будка в которой она размещалась сгорела, а персонал сидит в приюте для слабоумных. Если есть возможность получить информацию - хорошо. Если нет - текстовый файл не загадка. Можно даже прописывать отдельныю процедуру распознавания на каждую колонку. Но, конечно возникает ворпрос о параметре удовольствие-от-результата-деленное-на-затраченные-усилия. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||
|
|||||
Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
повторяю, файл, описывающий сколько должно быть полей, какие и сколько занимают места в памяти, есть. поэтому и говорю, что их там больше, чем я посчитала реально в файле, т.е. некоторые видимо просто пустые. только мне от этого нет пользы, т.к. dat файл сформирован какой-то программой (и как там что делается, никто не знает).
там описание 71 поля в виде: название поля CHAR(10) - и это явно не число символов!!! вряд ли мне это поможет, только лишь, я знаю, сколько реально полей должно быть. |
|||
|
||||
Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
заработало
![]() проблема была в некорректном завершении dat файла, поэтому программа отрабатывала и зависала в конце. теперь нормально запятыми разделяет, только вот оставшиеся пустые поля мне придется самой искать, имея описание и примерно догадываться по содержанию, где они должны быть. |
|||
|
||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Или формат. На то и протоколы с форматами ![]() Только в случае со "сгоревшей будкой" - тогда да ![]() Гм... это интересно. Одно и то же число может занимать разные объёмы памяти. Если это было писано не под джаву - то даже банальный интежер может быть разным под разными платформами. Кроме того, число можно по разному задать. обычно char(10) - это именно число символов ![]() -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Valeria, если не все колонки разделены - то искать можно только "по контексту". Тогда вопрос - во всех ли файлах одинаков список колонок? Если нет, то за счет чего - за счет того, что:
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |