Идея быстрой раскодировки файла | |
---|---|
boba Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Есть текстовый файл приличных размеров, который для обработки
пытаюсь декодировать в курсор Ниже его фрагмент Шапка времени повторяется каждые полчаса. Размер файла 1 год. Сначала написал такую программу Close Tables All Set Date To ymd Set Century On Set Decimals To 10 fln = Getfile('*') Set Escape On jkl = 0 If Not Empty(fln) Create Cursor curres (dtt T, freq N(14,10), ampl N(17,10)) strr = Filetostr(fln) For jj = 1 To Getwordcount(strr, Chr(13)) lcwrd = Chrtran(Getwordnum(strr,jj, Chr(13)),Chr(10),'') If 'start'$lcwrd jkl = jkl +1 lctm = Ctot(Substr(lcwrd,8,10)+' '+Substr(lcwrd,19,10)) If jkl = 1 oldlctm =lctm Endif Endif If Isdigit(lcwrd) And Not Empty(lctm) lcfreq = Val(Getwordnum(lcwrd, 1, ',')) lcampl = Val(Getwordnum(lcwrd, 2, ',')) Insert Into curres Values (lctm, lcfreq, lcampl) If Mod(jkl, 100) = 0 AND oldlctm !=lctm ?lctm oldlctm =lctm Endif Endif Endfor Endif За 9 часов программа прочитала только по середину мая. Пробовал открыть файл сначала в ексел, а потом обработать фоксом. Прочиталась только часть с предложение разбить файл на куски, да еще и неверно прочитался штамп времени. Идеи, ка прочитать файл побыстрее? start: 2018-01-01T00:00:00 end: 2018-01-01T01:00:00 # freq, power 0.0052556, -174.57586340502195 0.00573128, -174.45340799630088 0.00625, -174.62475197337486 0.00681567, -174.45507080934868 0.00743254, -174.5022208591745 0.00810525, -174.51012138731426 0.00883883, -174.64444667436527 0.00963882, -174.48909564292603 0.0105112, -174.65861740204647 0.0114626, -174.2354124743234 0.0125, -174.30681820946552 0.0136313, -173.92763380483257 0.0148651, -173.9639315139006 0.0162105, -173.541604007155 0.0176777, -173.72991109295486 0.0192776, -173.9579002757477 0.0210224, -173.87441085857427 0.0229251, -174.08462100108363 0.025, -173.95862073542267 0.0272627, -174.11107847193614 0.0297302, -174.458301552552 |
Re: Идея быстрой раскодировки файла | |
---|---|
akvvohinc Автор Сообщений: 4219 Откуда: Москва Дата регистрации: 11.11.2008 |
В первую очередь не загонять весь текстовый файл в строку - все эти функции работы со словами в огромной строке и есть главный тормоз, а прочитать миллион записей из текстового файла обычным FGETS() дело 2-3 секунд. Ну и мелочь:
Исправлено 1 раз(а). Последнее : akvvohinc, 30.10.19 20:21 |
Re: Идея быстрой раскодировки файла | |
---|---|
vk65 Сообщений: 402 Дата регистрации: 08.04.2008 |
Вместо filetostr/getwordnum... использовать fopen/fgets...
|
Re: Идея быстрой раскодировки файла | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
------------------ Лень - это неосознанная мудрость. |
Re: Идея быстрой раскодировки файла | |
---|---|
akvvohinc Автор Сообщений: 4219 Откуда: Москва Дата регистрации: 11.11.2008 |
Еще:
Я бы делал это примерно так:
А ниже, где это требуется, использовать f_changetime и не выполнять бесполезные присвоения oldlctm. Исправлено 1 раз(а). Последнее : akvvohinc, 30.10.19 20:57 |
Re: Идея быстрой раскодировки файла | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Можно ещё через APPEND FROM загнать в промежуточный курсор (банально 1 символьное поле на 100-200 символов, сколько там по логике максимально в строке возможно), и там уже перемещаясь по записям разбирать данные. В одной мега-строке со всем содержимым файла 100% не следует колупаться.
------------------ WBR, Igor |
Re: Идея быстрой раскодировки файла | |
---|---|
boba Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Сергей, спасибо за правку программы.
Пролетела в лет полтора миллиона записей. Я почему-то думал, что чтение в памяти должно работать быстро. |
Re: Идея быстрой раскодировки файла | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
А тут дело не в нём. В закоментированных строках убран подсчет количества строк файла в цикле. Условие цикла проверяется на каждой итерации. ------------------ Лень - это неосознанная мудрость. |
Re: Идея быстрой раскодировки файла | |
---|---|
vk65 Сообщений: 402 Дата регистрации: 08.04.2008 |
подсчет количества строк выполняется 1 раз.
|
Re: Идея быстрой раскодировки файла | |
---|---|
akvvohinc Автор Сообщений: 4219 Откуда: Москва Дата регистрации: 11.11.2008 |
Это противоречит руководству: The values of nInitialValue, nFinalValue, and nIncrement are read only initially. Тормоз - это GETWORDNUM() внутри цикла, да и бесполезные CHRTRAN() скорости не добавляют. Исправлено 1 раз(а). Последнее : akvvohinc, 31.10.19 17:27 |
© 2000-2024 Fox Club  |