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

Вниз

Как использовать потоки для быстрого чтения текстового файла?   Найти похожие ветки 

 
TInteger   (2013-09-17 12:16) [0]

Привет мастера! Подскажите плиз как быстро прочитать текстовый файл построчно в StringGrid(одна колонка)? Нагуглил что использование потоков ускорит дело, но понятного мне примера не нашел :( И еще не пониманию что лучше применить TFileStream или TSringStream?


 
sniknik ©   (2013-09-17 12:21) [1]

> Нагуглил что использование потоков ускорит дело
врут. сами по себе потоки ничего не ускоряют...

вот, что реально ускорит, так это отказ от визуальных компонент для чтения в них... разделяй в общем данные и отображение.


 
TInteger   (2013-09-17 12:41) [2]

>sniknik Вначале прочитать все из файла а потом заполнить данными таблицу?


 
sniknik ©   (2013-09-17 12:59) [3]

причитать и НЕ заполнять таблицу... отображать только нужное по мере необходимости. (аналоги DBGrig - дфтасеты, TreeView - виртуальный режим)


 
TInteger   (2013-09-17 13:25) [4]

А как быстрее прочитать построчно текстовый файл используя потоки? И куда кинуть данные чтобы потом когда нужны прочитать в грид?


 
[ВладОшин] ©   (2013-09-17 13:31) [5]


>  как быстрее прочитать построчно текстовый файл используя
> потоки?

А как читаешь на данный момент?


 
TInteger   (2013-09-17 13:48) [6]

Пробовал так:
procedure LoadingGrid(s:String);
var
fileList:TStringList;
i:Integer;
begin
 fileList:= TStringList.Create;
 try
   fileList.LoadFromFile(s);
   for i:= 0 to fileList.Count-1 do Form1.StringGrid1.Cells[0,i]:= fileList[i];
 finally
   fileList.Free;
 end;
end;

LoadingGrid("text.txt");

Вобще ничего не читает :(


 
Anatoly Podgoretsky ©   (2013-09-17 14:26) [7]

> TInteger  (17.09.2013 13:48:06)  [6]

В текущем положение нет файла "text.txt"


 
[ВладОшин] ©   (2013-09-17 14:30) [8]

Странно, у меня читает. А как определил, что не читает?

А можно так
  StringGrid1.RowCount := fileList.Count;
  StringGrid1.Cols[0] :=  fileList;
вместо
//   for i:= 0 to fileList.Count-1 do Form1.sg1.Cells[0,i]:= fileList[i];

TC := GetTickCount;
fileList:= TStringList.Create;
try
  fileList.LoadFromFile("D:\a.txt"); // файло 4 метра
  StringGrid1.RowCount := fileList.Count;
  StringGrid1.Cols[0] :=  fileList;
finally
  fileList.Free;
end;
ShowMessage( IntToStr(GetTickCount - TC) );

47 тиков


 
TInteger   (2013-09-17 14:34) [9]

Файл точно есть. Не читает потому что не заполняется грид. (ХЕ5,андроид приложение) Как применить чтение потоком из файла в грид?


 
TInteger   (2013-09-17 14:39) [10]

StringGrid1.Cols[0] :=  fileList;
[DCC Error] Unit1.pas(338): E2003 Undeclared identifier: "col"
:(


 
TInteger   (2013-09-17 14:40) [11]

StringGrid1.Cols[0] :=  fileList;
[DCC Error] Unit1.pas(338): E2003 Undeclared identifier: "cols"
вернее :)


 
[ВладОшин] ©   (2013-09-17 14:45) [12]

S :=  format("%d %d %d %d",[ StringGrid1.RowCount, StringGrid1.ColCount,    StringGrid1.FixedCols, StringGrid1.FixedRows]);

перед
 >> for i:= 0 to fileList.Count-1 do Form1.StringGrid1.Cells[0,i]:= fileList[i];

чему равно S?


 
[ВладОшин] ©   (2013-09-17 14:48) [13]


> ХЕ5,андроид

И что, там нет ?

 TStringGrid = class(TDrawGrid)

 public

   property Cols[Index: Integer]: TStrings read GetCols write SetCols;

мда..


 
Ega23 ©   (2013-09-17 14:52) [14]

Для начала я бы порекомендовал не забывать про BeginUpdate - EndUpdate
Порой на порядок-два ускорение даёт.


 
TInteger   (2013-09-17 14:53) [15]

9999 17 0 0


 
TInteger   (2013-09-17 14:57) [16]

Похоже нет, раз компилятор ругается :(


 
Anatoly Podgoretsky ©   (2013-09-17 14:58) [17]

> TInteger  (17.09.2013 14:34:09)  [9]

А чем докажешь, что в текущем месте есть этот файл?


 
[ВладОшин] ©   (2013-09-17 15:01) [18]

а вообще, что -то видно, в любых других ячейках, если писать хоть что-нибудь?
for i:= 0 to 9 do Form1.StringGrid1.Cells[random(10),random(10)]:= "qwert";


 
TInteger   (2013-09-17 15:05) [19]

>Anatoly Podgoretsky Чесное пионерское! :)
>[ВладОшин] Вручную пишу данные,тогда отображает: StringGrid1.Cells[0,0]:="1";


 
[ВладОшин] ©   (2013-09-17 15:06) [20]


> А чем докажешь, что в текущем месте есть этот файл?

кстати, да

try
  if not(FileExists(s)) then
  begin
    ShowMessage("!!");
    Exit;
  end;
  fileList.LoadFromFile(s);

хотя LoadFromFile( из несуществующего, должен дать Exception


 
[ВладОшин] ©   (2013-09-17 15:08) [21]

а подшовь-ка мессагу на предмет  fileList.Count = ?


 
TInteger   (2013-09-17 15:09) [22]

Вот так читает, но долго:
procedure LoadingGrid(s:String);
var
f: TextFile;
n:Integer;
q:String;
begin
AssignFile(f,s);
Reset(f); n:=0;
Form1.StringGrid1.BeginUpdate;
 while not EOF(f) do
 begin
   readln(f, q);
   Form1.StringGrid1.Cells[0,n]:=q;
   n:=n+1;
 end;
 CloseFile(f);
 Form1.StringGrid1.EndUpdate;
end;


 
TInteger   (2013-09-17 15:10) [23]

Файл 321кб, fileList.Count =2070


 
Anatoly Podgoretsky ©   (2013-09-17 15:34) [24]

Это далеко не чтение файла, убери Form1.StringGrid1.Cells[0,n]:=q; и n:=n+1;


 
[ВладОшин] ©   (2013-09-17 15:39) [25]

А тут написано, что есть св-во
http://docwiki.embarcadero.com/Libraries/XE5/en/Vcl.Grids.TStringGrid.Cols


 
Anatoly Podgoretsky ©   (2013-09-17 15:40) [26]

Пионерское уже не в почете, нужно документально подтвердить и желательно при разных запусках.


 
TInteger   (2013-09-17 15:41) [27]

>Anatoly Podgoretsky А как присвоить прочитанное значение и увеличить пор.номер след присваиваемой строки? inc?


 
TInteger   (2013-09-17 15:42) [28]

>[ВладОшин]  Похоже Андроидский грид отличается :( иначе чего бы компилятору возмущатся?


 
[ВладОшин] ©   (2013-09-17 16:18) [29]

а почему постоянно упоминается
Form1.
?

procedure LoadingGrid(s:String); она где объявлена?


 
TInteger   (2013-09-17 16:28) [30]

Форма одна, в процедуре если не писать Form1 тогда не узнает компоненты на форме :( Процедура LoadingGrid нигде не объявлена, сама по себе :) А где надо объявить?


 
[ВладОшин] ©   (2013-09-17 16:56) [31]

да это так, уточняю.. По идее не важно.
А так - в разделе Public формы, например, я бы объявил

А весь код модуля можно глянуть?
Что-то странное творится :)



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

Текущий архив: 2014.07.20;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.006 c
15-1378323312
Интересующийся
2013-09-04 23:35
2014.07.20
Кто-нибудь знает ?


15-1388304091
Мишаня
2013-12-29 12:01
2014.07.20
Ищу книгу


15-1388252931
картман
2013-12-28 21:48
2014.07.20
биатлон есть


15-1388057457
Scott Storch
2013-12-26 15:30
2014.07.20
Битрикс


15-1387710416
Пит
2013-12-22 15:06
2014.07.20
Чайник долго не нагревается!