![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как использовать потоки для быстрого чтения текстового файла?
TInteger © (2013-09-17 12:16:00)Привет мастера! Подскажите плиз как быстро прочитать текстовый файл построчно в StringGrid(одна колонка)? Нагуглил что использование потоков ускорит дело, но понятного мне примера не нашел :( И еще не пониманию что лучше применить TFileStream или TSringStream?
[ВладОшин] (2013-09-17 16:56:00) [1]да это так, уточняю.. По идее не важно.
А так - в разделе Public формы, например, я бы объявил
А весь код модуля можно глянуть?
Что-то странное творится :)
TInteger (2013-09-17 16:28:00) [2]Форма одна, в процедуре если не писать Form1 тогда не узнает компоненты на форме :( Процедура LoadingGrid нигде не объявлена, сама по себе :) А где надо объявить?
[ВладОшин] (2013-09-17 16:18:00) [3]а почему постоянно упоминается
Form1.
?
procedure LoadingGrid(s:String); она где объявлена?
TInteger (2013-09-17 15:42:00) [4]>[ВладОшин] Похоже Андроидский грид отличается :( иначе чего бы компилятору возмущатся?
TInteger (2013-09-17 15:41:00) [5]>Anatoly Podgoretsky А как присвоить прочитанное значение и увеличить пор.номер след присваиваемой строки? inc?
Anatoly Podgoretsky (2013-09-17 15:40:00) [6]Пионерское уже не в почете, нужно документально подтвердить и желательно при разных запусках.
[ВладОшин] (2013-09-17 15:39:00) [7]А тут написано, что есть св-во
http://docwiki.embarcadero.com/Libraries/XE5/en/Vcl.Grids.TStringGrid.Cols
Anatoly Podgoretsky (2013-09-17 15:34:00) [8]Это далеко не чтение файла, убери Form1.StringGrid1.Cells[0,n]:=q;и n:=n+1;
TInteger (2013-09-17 15:10:00) [9]Файл 321кб, fileList.Count =2070
TInteger (2013-09-17 15:09:00) [10]Вот так читает, но долго:
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;
[ВладОшин] (2013-09-17 15:08:00) [11]а подшовь-ка мессагу на предмет fileList.Count = ?
[ВладОшин] (2013-09-17 15:06:00) [12]
> А чем докажешь, что в текущем месте есть этот файл?
кстати, да
try
if not(FileExists(s)) then
begin
ShowMessage('!!');
Exit;
end;
fileList.LoadFromFile(s);
хотя LoadFromFile( из несуществующего, должен дать Exception
TInteger (2013-09-17 15:05:00) [13]>Anatoly Podgoretsky Чесное пионерское! :)
>[ВладОшин] Вручную пишу данные,тогда отображает: StringGrid1.Cells[0,0]:='1';
[ВладОшин] (2013-09-17 15:01:00) [14]а вообще, что -то видно, в любых других ячейках, если писать хоть что-нибудь?
for i:= 0 to 9 do Form1.StringGrid1.Cells[random(10),random(10)]:= 'qwert';
Anatoly Podgoretsky (2013-09-17 14:58:00) [15]> TInteger (17.09.2013 14:34:09) [9]
А чем докажешь, что в текущем месте есть этот файл?
TInteger (2013-09-17 14:57:00) [16]Похоже нет, раз компилятор ругается :(
TInteger (2013-09-17 14:53:00) [17]9999 17 0 0
Ega23 (2013-09-17 14:52:00) [18]Для начала я бы порекомендовал не забывать про BeginUpdate - EndUpdate
Порой на порядок-два ускорение даёт.
[ВладОшин] (2013-09-17 14:48:00) [19]
> ХЕ5,андроид
И что, там нет ?
TStringGrid = class(TDrawGrid)
public
property Cols[Index: Integer]: TStrings read GetCols write SetCols;
мда..
[ВладОшин] (2013-09-17 14:45:00) [20]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?