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

Вниз

Ошибка при чтении файла   Найти похожие ветки 

 
Sergik   (2003-04-16 16:21) [0]

Объясните в чем ошибка: в процедуре SaveAs я сохраняю значения из массива записей в фаил и, для проверки, вывожу часть содержимого каждой записи из файла в ShowMessage - все работает,
но, если я пытаюсь прочитать то же самое содержимое в процедуре Open ничего не получается. Пожалуйста помогите разобраться (фаил не типизированный).


procedure TMain.Open1Click(Sender: TObject);
var
T: RCommandParams;
begin
if OpenDialog1.Execute then
begin
AssignFile(SPOFile, OpenDialog1.FileName);
Reset(SPOFile, 1);
j := 0;
while not EOF(SPOFile) do
begin
Seek(SPOFile, j * SizeOf(RCommandParams));
BlockRead(SPOFile, T, SizeOf(RCommandParams));
ShowMessageFmt("Text: %s, ItemIndex %d",[ T.Text,
T.ItemIndex]);
Inc(j);
end;
CloseFile(SPOFile);
end;
end;

procedure TMain.Saveas1Click(Sender: TObject);
var
T: RCommandParams;
begin
if SaveDialog1.Execute then
begin
AssignFile(SPOFile, SaveDialog1.FileName);
ReWrite(SPOFile, 1);
try
for i := 0 to High(ListOfCellsSG) do
BlockWrite(SPOFile, ListOfCellsSG[i], SizeOf
(RCommanddParams));
finally
CloseFile(SPOFile);
end;
end;
Reset(SPOFile, 1);
j := 0;
while not EOF(SPOFile) do
begin
Seek(SPOFile, j * SizeOf(RCommandParams));
BlockRead(SPOFile, T, SizeOf(RCommandParams));
ShowMessageFmt("Text: %s, ItemIndex %d",
[T.Text, T.ItemIndex]);
Inc(j);
end;
CloseFile(SPOFile);
end;


 
MBo ©   (2003-04-16 16:29) [1]

объявление RCommandParams?


 
Sergik   (2003-04-16 16:30) [2]

RCommandParams = record
Text: String;
ItemIndex: integer;
Params: array [0..1] of integer;
Col: integer;
Row: integer;
end;


 
Внук ©   (2003-04-16 16:30) [3]

Ничего не получается - очень размытоое понятие. Что происходит? Какая ошибка выдается, если выдается в IOResult?


 
Skier ©   (2003-04-16 16:35) [4]

Очень похоже что проблема в поле - Text: String;


 
Anatoly Podgoretsky ©   (2003-04-16 16:35) [5]

В любом случае смцщает это Text: String;, какой смысл писать читать указатель?


 
MBo ©   (2003-04-16 16:36) [6]

Text: String;

Вот где собака зарыта!
Используй string[число<256], если это возможно


 
Sergik   (2003-04-16 16:41) [7]

Спасибо за совет с ограничением длины строки. По-моему получиться


 
Внук ©   (2003-04-16 16:44) [8]

Дело не в ограничении, дело в фактически разных типах данных, точнее, в различиях внутреннего преставления этих данных.


 
Sergik   (2003-04-16 16:45) [9]

А по подробнее можно. Хотелось бы все-таки поняти причину :)


 
Внук ©   (2003-04-16 16:48) [10]

Подробнее - в случае объявления string по умолчанию фактически используется тип AnsiString. При указании длины будет использоваться тип ShortString. А разница в их реализации описана в Help.

Кстати, без указания длины, если просто заменить string на ShortString, вроде тоже должно работать.


 
MBo ©   (2003-04-16 16:48) [11]

string, т.е по умолчанию ansistring - на самом деле указатель, и в файл пишется не содержимое строки, а адрес, который в другой момент времени не имеет смысла.


 
Polevi ©   (2003-04-16 16:48) [12]

Text: String;
данной поле содержит не строку а 4 байта ее адреса
эти 4 байта ты и пишешь в файл


 
Sergik   (2003-04-16 17:01) [13]

Спасибо, я понял.



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

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

Наверх




Память: 0.49 MB
Время: 0.019 c
4-91588
aga
2003-02-28 18:29
2003.04.28
ListView_FindItem


1-91360
Giemgo
2003-04-13 13:07
2003.04.28
Что делает Halt?


1-91341
[diesel]
2003-04-15 07:31
2003.04.28
Отслеживание изменения размера колонки TListView


1-91396
Тфьу
2003-04-15 10:53
2003.04.28
Поменять яркость.


14-91477
CRACKISH
2003-03-29 07:36
2003.04.28
Моя программа!