работа с текстом
От: par  
Дата: 16.03.04 11:57
Оценка:
вопрос вот какой :
Мне нужно загрузить из текстового файла
записи для последующего анализа,
разделенные между собой построчно
вобщем мой код выглядит так


Procedure LoadDet(FileName:string) ;
var
    DetFile:TextFile;
    CurStr:string;
    I:integer;
    Code:integer;
begin
  I:=0   ;
  SetLength(Details,1);

 AssignFile(DetFile,FileName);
 Reset(DetFile);
   while not SeekEoF(DetFile) do
   begin
   Readln(DetFile,CurStr);
   If CurStr[1]<>'Í' then
    begin
     Details[i].Phone := StrToInt64(Trim(LeftStr(CurStr,11)));
         <........>     
     Details[i]._Type := Trim(MidStr(CurStr,126,14));
     Details[i].SVC_type := Trim(MidStr(CurStr,141,30));
     SetLength(Details,I+2) ;
     I:=I+1;
    end;
   end;

CloseFile(DetFile) ;


В массив всё ложиться как положено(Details — это массив записей)

type
   Det=Record
   Phone:int64;
   Date:String;
   _Time:string;
   RealTime:String;
   RoundTime:String;
   Price:real;
   TelIn:String;
   TelOut:String;
   Dir:String;
   Chanel:String;
   _Type:String;
   SVC_type:String;
end;

Var
Details:array of Det;


затем
я объявляю рекордсет и добавляю ему поля соответсвующие
так вот при попытке сделать .CreateRecordset или .Open ОНО мне пишет что-то вроже "Can't load Midas.dll" либо , если файл чуть поменьше, "...raised ..NotEnoughMemory"
если файл маленький то всё ОК однако в моём варианте размер файла порядка 3,5 мб и будет расти ...

подскажите плз что делать

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

и есчо вопрос :как видно грузится всё вутри цикла ,так вот как сделать так чтоб во время выполнения программа не создавала впечатление "зависшей"
Re: работа с текстом
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.03.04 12:13
Оценка:
Здравствуйте, par, Вы писали:
Для оформления кода на RSDN используются теги RSDN ML. Теги HTML (и <CODE> в том числе) не поддерживаются. Поэтому пользуйтесь, пожалуйста, соответствующими тегами. Для текстов программ на Pascal и Delphi используется тег [pascal][/pascal]. Все доступные теги перечислены ниже окна для ввода текста при постинге сообщения. через веб.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: работа с текстом
От: s.ts  
Дата: 16.03.04 12:32
Оценка:
Здравствуйте, par, Вы писали:

par>подскажите плз что делать


Убрать SetLenght из цикла

par>и есчо вопрос :как видно грузится всё вутри цикла ,так вот как сделать так чтоб во время выполнения программа не создавала впечатление "зависшей"


вариант 1: в цикле вызывать Application.ProcessMessages
вариант 2: запускать цикл в отдельном потоке (TThread)
Re[2]: работа с текстом
От: par  
Дата: 16.03.04 12:46
Оценка:
ST>Убрать SetLenght из цикла

Как же мне убрать SetLength если массив динамический и заранее длинна файла неизвестна

par>>и есчо вопрос :как видно грузится всё вутри цикла ,так вот как сделать так чтоб во время выполнения программа не создавала впечатление "зависшей"


ST>вариант 1: в цикле вызывать Application.ProcessMessages

спасиб
ST>вариант 2: запускать цикл в отдельном потоке (TThread)
а вот про TThread можно поподробней чуть
Re[3]: работа с текстом
От: s.ts  
Дата: 16.03.04 13:08
Оценка:
Здравствуйте, par, Вы писали:



ST>>Убрать SetLenght из цикла


par>Как же мне убрать SetLength если массив динамический и заранее длинна файла неизвестна


стратегия выделения памяти не должна быть столь безобразной
лучше TList использовать
а еще лучше переопределить его метод Grow под свою специфику

изначально установить capacity во что-нибудь типа file_size/mean_line_size

при чтении из файла сразу в датасет писать


par>>>и есчо вопрос :как видно грузится всё вутри цикла ,так вот как сделать так чтоб во время выполнения программа не создавала впечатление "зависшей"


ST>>вариант 1: в цикле вызывать Application.ProcessMessages

par>спасиб
ST>>вариант 2: запускать цикл в отдельном потоке (TThread)
par>а вот про TThread можно поподробней чуть

Ctrl+N "Thread Object"
Re[4]: работа с текстом
От: par  
Дата: 16.03.04 13:24
Оценка:
ST>при чтении из файла сразу в датасет писать


Ето я уже и так понял Ж)
я просто тут статейку прочитал про то как SetLength работает и куда СТОЛЬКО памяти уходит

плюнул я на ето
начал прямо в БД писать
там задача такая: есть два массива данных
с одинаковым идентификаторм в поле записи,их надо сгруппировать по этим полям, так вот я хотел
программно всё прописать (в образце то у меня их порядка двухсот было ) , забил ...

решил SQL запросом их друг к другу привязывать

счас у меня порядка 19k записей уже так что походу SQL — единственный выход

может кто подскажет какие другие варианты , так для общего развития
и еисчо есть интегрированный с делфи редактор SQL чтоб с подсветкой строчек
Re[5]: работа с текстом
От: s.ts  
Дата: 16.03.04 13:38
Оценка:
Здравствуйте, par, Вы писали:

par>счас у меня порядка 19k записей уже так что походу SQL — единственный выход


par>может кто подскажет какие другие варианты , так для общего развития


для общего развития Н.Вирт что-то типа "Алгоритмы+структуры данных=программы" (не помню, вроде так называется)
или подобное
не обессудь

par>и еисчо есть интегрированный с делфи редактор SQL чтоб с подсветкой строчек


ага — тот-же, что и pascal-строчки подсвечивает (file->Open "*.sql")
Re[6]: работа с текстом
От: par  
Дата: 16.03.04 14:07
Оценка: :)
ST>для общего развития Н.Вирт что-то типа "Алгоритмы+структуры данных=программы" (не помню, вроде так называется)
ST>или подобное
ST>не обессудь

Потозрително знаккомое назфание у эттой книшшка
Re[5]: работа с текстом
От: s.ts  
Дата: 16.03.04 14:42
Оценка:
Здравствуйте, par, Вы писали:




par>счас у меня порядка 19k записей уже так что походу SQL — единственный выход


sql — не единственный, а самый простой выход, к тому же видимо с могучим оверхедом
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.