|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
запись из потока в массив
Подскажите пожалуйста, при чтении из потока в файл выходит ошибка is not a valid integer value.
При записи массива в поток все работает корректно. Код:
unit TEST1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ToolWin, ComCtrls, ActnMan, ActnCtrls, Grids; const MaxElements = 10; type TForm1 = class(TForm) SaveButton1: TButton; StringGrid1: TStringGrid; StringGrid2: TStringGrid; LoadButton1: TButton; procedure SaveButton1Click(Sender: TObject); procedure LoadButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.SaveButton1Click(Sender: TObject); var i: integer; n: array[1..MaxElements] of integer; p1: TStream; S: string; begin for i := 1 to MaxElements do n[i]:= (i)*(-2); for i := 1 to MaxElements do StringGrid1.Cells[1, i]:= intTostr(n[i]); begin p1 := TFileStream.Create('D:\тест\file34.txt', fmCreate); try for i := 1 to MaxElements do begin S := IntToStr(n[i]) + #13#10; p1.Write(PChar(S)^, Length(S)); end; finally end; p1.Free; end; end; procedure TForm1.LoadButton1Click(Sender: TObject); var i:integer; k: array[1..MaxElements] of integer; p2:TStream; f:array[1..10] of string; begin p2:= TFileStream.Create('D:\тест\file34.txt', fmopenread); try for i := 1 to MaxElements do begin p2.Read(PChar(f[i])^, Length(f)); // p2.Read(k[1], MaxElements*(SizeOf(integer))); // for i := 1 to MaxElements do begin k[i]:=strtoint(f[i]); StringGrid2.Cells[1, i] := IntToStr(f[i]); end; finally end; p2.Free; end; end. |
#2
|
|||
|
|||
Угумс. Просто ты пишешь данные как строки, но не пишешь длинну.
А длинна кажлого числа тебе потом потребуется для чтения. Вот ты и получаешь ошибки. Вообще-то, у тебя не самый эффективный способ работы с потоками. Все преимущество потоков ты теряешь. А именно, что в поток пишется только полезные данные. Если ты хочешь "видеть" в файле свои цифирьки, то не используй поток. Ну, или если очень приспичило, то набирай данные в TStringList в виде строк, а потом его пиши в поток. Хотя опять-же - не самое эффективное использование потока. |