Главная страница
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.018 c
14-91505
NickBat
2003-04-10 16:32
2003.04.28
Про творчество...


1-91309
_MAXi_
2003-04-17 13:16
2003.04.28
Активация MDIChild формы через Toolbar


1-91394
j.r.
2003-04-16 08:38
2003.04.28
поиск строки...


14-91553
Johnmen
2003-04-11 15:46
2003.04.28
ВНИМАНИЕ!!! Голосование!!! Лучший Смит&Вессон!!!


1-91318
Val
2003-04-11 14:58
2003.04.28
Изменение стиля пера