Форум: "Основная";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
ВнизОшибка при чтении файла Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c