Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.96.61] |
|
Сообщ.
#1
,
|
|
|
Чтобы записать данные я использую процедуру:
procedure SaveToFile(file1:string;str:string); var f:TextFile; FileDir:String; begin FileDir:='c:\docum\'+file1; AssignFile(f,FileDir); if not FileExists(FileDir) then begin Rewrite(f); CloseFile(f); end; Append(f); Writeln(f,str); Flush(f); CloseFile(f); end; Также есть текстовый файл, там 100 записей. Они расположены в столбец. Цитата 153558 230050 566149 230654 997637 715975 488256 571560 862615 679830 204699 995083 732867 318490 474853 573098 242767 278829 708093 627481 376690 757723 763793 230105 769012 602047 951330 702847 604107 908676 230078 217581 416351 524484 709411 996182 290118 546347 448706 310525 759783 721139 657336 382485 109722 345736 294677 283938 674310 967013 570104 436758 737921 981845 442993 812820 834930 137106 222717 933999 149713 429672 668652 772171 116644 706417 290173 749209 820098 264218 746655 836990 994451 649948 547473 557388 724078 260482 452001 782278 543353 642697 769616 133535 536651 193466 459692 383035 338348 459664 731604 152651 932818 738168 544726 314260 154437 775851 208435 389736 Как их прочитать записать в массив и добавить в Memo? |
Сообщ.
#2
,
|
|
|
Проще всего прочитать текстовый файл в Memo.Lines.LoadFromFile. Если строки нужны в виде отдельного списка - то в TStringList
|
Сообщ.
#3
,
|
|
|
Если надо в массив, тогда можно вот так через объект TStringList
type TDynamicArrayOfIntegers = array of Integer; function LoadFromFile(const fname: String): TDynamicArrayOfIntegers; var S: TStringList; I: Integer; begin if FileExists(fname) then begin S := TStringList.Create; S.LoadFromFile(fname); SetLength(Result, S.Count); for i := 0 to S.Count - 1 do Result[i] := StrToInt(S[i]); FreeAndNil(S); end else Result := nil; end; type TDynamicArrayOfIntegers = array of Integer; function LoadFromFile(const fname: String): TDynArr; var F: TextFile; begin Result := nil; if FileExists(fname) then begin AssignFile(F, fname); Reset(F); while not EOF(F) do begin SetLength(Result, Length(Result) + 1); ReadLn(F, Result[High(Result)]); end; Close(F); end; end; |
Сообщ.
#4
,
|
|
|
Не получается в Memo вывести выдает ошибку.
Цитата [Error] Unit1.pas(66): Incompatible types: 'String' and 'TDynamicArrayOfIntegers' Код: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TDynamicArrayOfIntegers = array of Integer; type TForm1 = class(TForm) Memo1: TMemo; procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation function LoadFromFile(const fname: String): TDynamicArrayOfIntegers; var S: TStringList; I: Integer; FileDir:String; begin FileDir:='c:\docum\'+fname; if FileExists(FileDir) then begin S := TStringList.Create; S.LoadFromFile(FileDir); SetLength(Result, S.Count); for i := 0 to S.Count - 1 do Result[i] := StrToInt(S[i]); FreeAndNil(S); end else Result := nil; end; procedure SaveToFile(file1:string;str:string); var f:TextFile; FileDir:String; begin FileDir:='c:\docum\'+file1; AssignFile(f,FileDir); if not FileExists(FileDir) then begin Rewrite(f); CloseFile(f); end; Append(f); Writeln(f,str); Flush(f); CloseFile(f); end; {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); var str:TDynamicArrayOfIntegers; begin str:=LoadFromFile('Ex1.txt'); Memo1.Lines.Add(str); end; end. |
Сообщ.
#5
,
|
|
|
Мой совет вам не подошёл?
|
Сообщ.
#6
,
|
|
|
Цитата Katerina1993 @ Не получается в Memo вывести выдает ошибку. Так в сообщении об ошибке ясно же сказано. В Memo надо добавлять строки, а у вас тут другой тип данных. Можно модифицировать программу вот так, если надо одновременно загружать данные и выводить их в Memo type TDynamicArrayOfIntegers = array of Integer; function LoadFromFile(const fname: String; lines: TStrings): TDynamicArrayOfIntegers; var I: Integer; FileDir:String; begin FileDir:='c:\docum\'+fname; if FileExists(FileDir) then begin lines.LoadFromFile(FileDir); SetLength(Result, lines.Count); for i := 0 to S.Count - 1 do Result[i] := StrToIntDef(lines[i], 0); end else Result := nil; end; procedure TForm1.FormShow(Sender: TObject); var str:TDynamicArrayOfIntegers; begin str:=LoadFromFile('Ex1.txt', Memo1.Lines); end; procedure TForm1.FormShow(Sender: TObject); var str:TDynamicArrayOfIntegers; i: Integer; begin str:=LoadFromFile('Ex1.txt'); Memo1.Clear; for i := Low(str) to High(str) do Memo1.Lines.Add(IntToStr(str[i])); end; |
Сообщ.
#7
,
|
|
|
Добавлю свои 5 копеек.
Если нужно загрузить данные как в виде текста для Memo, так и в виде динамического массива integer, то лучше всего использовать загрузку текста в вспомогательный TStringList (например, SL) методом SL.LoadFromFile, затем скопировать текст в мемо одной строкой Memo1.Lines.Text:=SL.Text, затем копировать данные в динамический массив в цикле через StrToInt, как предложено в предыдущих сообщениях. Примечание. Создание и удаление вспомогательного объекта TStringList рекомендуется заключать в блок try-finally-end. |
Сообщ.
#8
,
|
|
|
leo
TStringList получается лишней сущностью |