Форум: "Начинающим";
Текущий архив: 2014.07.20;
Скачать: [xml.tar.bz2];
ВнизКак использовать потоки для быстрого чтения текстового файла? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.017 c