Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-91441
RUS1
2003-03-05 08:49
2003.04.28
Использование массивов переменной длинны при работе с Socket


4-91586
}{enon
2003-03-01 16:18
2003.04.28
Проблемы с хуком


1-91249
Top Gun
2003-04-07 22:01
2003.04.28
Зачем нужен GetModuleHandle ?


14-91472
Плохой человек
2003-04-09 23:57
2003.04.28
Чем работать с палитрами.


1-91294
Kedis
2003-04-17 12:29
2003.04.28
Ожидание в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский