Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.01;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
14-1612
Мазут Береговой
2003-08-12 10:41
2003.09.01
Ну, тока шо прикололся! :-)


6-1533
nester
2003-06-25 18:16
2003.09.01
как перехватить в IE 404 not found и подсунуть вместо этого свое


1-1381
Dimon
2003-08-16 19:27
2003.09.01
Синтаксис С++:(seen_eap |= PW_MESSAGE); Как это выгл. в Delphi??


7-1686
Jumbo
2003-06-17 04:52
2003.09.01
Microsoft Help Workshop


14-1550
Ketmar
2003-08-12 10:59
2003.09.01
телевизор рулит!