Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];

Вниз

csv-файл и #0A   Найти похожие ветки 

 
alex-ran   (2003-08-18 15:35) [0]

Уважаемые мастера, помогите разобраться со следующей проблемой.
Счета за мобильные переговоры с детальной распечаткой стали пересылать по мылу в виде csv-файла (фрагмент файла как его видит текстовый редактор):
Послуги Їноземного оператора (ПДВ 0%):,0.00
Рахунок по контракту,364.97

,,"ВихЇднЇ дзвЇнки ","UMC ", 80506606677,GOUMC ,01.07.2003
,,"ВихЇднЇ дзвЇнки ","Укра_на ", 805649155541,GOUKR ,01.07.2003

Как видите данные табличной структуры в нем перемешаны с текстовым мусором. Поэтому связываться с ним как с файлом БД в текстовом виде я не могу (или все-таки есть выход?),
Поэтому я попробовал читать его как текстовый и отлавливать строки начинающиеся на ",,". Но и это не вышло. При анализе я увидел что файл и начинается с #0A и далее их просто дофига. Объясните плиз, что происходит когда ReadLn натыкается на #0A и как это обойти, или есть какое-либо другое решение?


 
mOOx_   (2003-08-18 15:38) [1]

На сколько я помню, csv замечательно открывается в Ехеле выше 95-го...


 
alex-ran   (2003-08-18 15:41) [2]

да, это так, было б в нем строк 20 для обработки я бы и не морочил голову ни себе ни людям. Но когда только табличных строк в нем более 10000 возникает желание обрабатывать их программно :)


 
mOOx_   (2003-08-18 15:44) [3]

Так а в чем собственно вопрос?


 
alex-ran   (2003-08-18 15:54) [4]

открыть его как таблицу (с ttASCII) я не могу, в нем много простого текстового мусора, а не только табличные данные (см. фрагмент файла в вопросе), а когда пробую читать как текстовый построчно - ни фига не выходит, читаю так:
AssignFile(F, opnDlg.FileName);
Reset(F);
while not Eof(F) do
begin
Readln(F, S);
mm.Lines.Add(S);
end
при этом в mm: TRichEdit нифига!


 
mOOx_   (2003-08-18 16:04) [5]

А F как объявлено?


 
alex-ran   (2003-08-18 16:22) [6]

как
F: TextFile;
кстати я тут обратил внимание что в ентом файле #0D нету перед #0A (кто из них возврат каретки, а кто перевод строки не помню, но по-моему #0D - возврат каретки:))
так что конкретизирую, насколько это фатально для ReadLn?
и ежели сильно, то как это обойти?


 
mOOx_   (2003-08-18 16:24) [7]

А если файл загнать в поток, а в RichEdit из этого потока считать?


 
alex-ran   (2003-08-18 16:27) [8]

не знаю, но мне кажется разгадка проще намного должна быть


 
kuchumovkv   (2003-08-18 16:36) [9]

Перевод каретки - #0D, все верно. По моему это не фатально для Readln, но я могу ошибаться. Попробуй испытанный мною годами способ - начинать читать все кривые файлы побайтно. Предвосхищая вопрос о скорости обработки - работает гораздо быстрее, чем кажется на первый взгляд. Универсально для любых файлов, как для бинарных с переменной или неизвестной длиной записи и структурой, для текста тоже подойдет.

P.S. dll-ками не балуешься? Ну, очень нужно спросить!


 
VAleksey   (2003-08-18 16:37) [10]

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

PS
А ado не пробовал?
Помнится я прекрасно читал csv файлы с помощью ADOTable.


 
VAleksey   (2003-08-18 16:38) [11]

Да. Точно. Если Excel правильно открывает файл, то ADOTable (с правильно настроенной строкой подключения), тоже прекрасно справиться.


 
alex-ran   (2003-08-18 16:57) [12]

спасибо что откликнулись, но я опять напоминаю как подключиться к стандартному компоненту, если файл примерно такой? (структура повторяется многократно, разделитель ","):

"текстовый мусор, много :)"

"название переменной,VarN1
...
"название переменной,VarNM

,,VarK1,VarK2,...,VarKL //только это собственно мне и надо
...
,,VarK1,VarK2,...,VarKL

и т.д. в цикле для другого абонента


Неужели ADОTable с этим справится?

к kuchumovkv © к сожалению ДЛЛ-ки только в общеобразовательном плане


 
VAleksey   (2003-08-18 17:50) [13]


> alex-ran (18.08.03 16:57)

Если < Excel открывает нормально > To
Используем AdoTable;
Иначе
<Читать до разделителя и писать в соответствующие поля какой - нибудь таблички, а потом обрабатывать.>


 
kuchumovkv   (2003-08-18 18:00) [14]

Насчет ДЛЛ - жаль, а так, то может действительно попробовать ADO?
Если правильно понял, тебе еще нужно и отобразить данные на форме. Не получится, так не получится, в этом деле кроме как методом проб и ошибок сложно. Иначе VAleksey прав, наверное, придестя импортить в какую-либо читабельную таблицу. Побитное чтение с записью в ДБФ-ку по 6 полям 30000 записей на Celeron 600 с убитой виндой у меня занимало минуты три. Не так уж и много, если разобраться.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
1-1471
DVP1
2003-08-18 14:41
2003.09.01
Как удалить из текстового файла строку?


14-1651
Карелин Артем
2003-08-12 09:49
2003.09.01
Лара Крофт II. Как впечатления?


14-1643
likeanangel
2003-08-12 12:30
2003.09.01
XML Parser


3-1284
Zorik
2003-08-11 09:16
2003.09.01
Табличные даные в Interbase


14-1607
k-man
2003-08-13 18:37
2003.09.01
Странности





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский