Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запись в файл переменной типа string. [D4, Win95/98]


Страницы:   1 2

Fredericco ©   (2002-09-27 11:12:00) 

Привет уважаемые мастера!
У меня вот такой вопрос. Есть рекорд

TMyRec=record
I:integer;
S:String[255];
end;

и файл

F:File of TMyRec;

Данная структура не может быть записана в файл если не указать длину строки S. Так вот, кто уже с этим сталкивался, подскажите пожалуйста как правильней всего записывать строки большей длины.

С уважением к Мастерам.
Fredericco.


Fredericco   (2002-09-27 14:17:00) [21]

>Anatoly Podgoretsky
>Alx2

Новости подробного чтения:

> Данная структура не может быть записана в файл если не указать
> длину строки S


MBo   (2002-09-27 14:16:00) [22]

>Anatoly Podgoretsky
>Alx2

Новости телепатии:

Тот тип, который он привел, у него записывается, а если убирает [255] - тогда нет. Вот что он имел в виду


Anatoly Podgoretsky   (2002-09-27 14:14:00) [23]

Я не из головы беру, откомпилировано без единого предупреждения и выполнено без единой ошибки, файл как и ожидалось оказался ровно 260 байт и строго нужного содержания.
У тебя яно не тот код, который приведен в сообщении Fredericco © (27.09.02 11:12)

Естественно не было нужды делать пратическую проверку, это только для тебя, что бы ты не мог утверждаать, мол проверь сначала.


Fredericco   (2002-09-27 14:10:00) [24]

2Alx2 © (27.09.02 14:03)
Прчти внимательней вопрос:

> Данная структура не может быть записана в файл если не указать
> длину строки S

То бишь:

TMyRec=record
I:integer;
S:String; // Не указав длину строки
end;


Fredericco   (2002-09-27 14:05:00) [25]

2Alx2 © (27.09.02 14:03)
Может потому что у меня D4.


Alx2   (2002-09-27 14:03:00) [26]

>Fredericco © (27.09.02 14:02)
Что то очень странное творится в королевстве датском :)


Fredericco   (2002-09-27 14:03:00) [27]

2MBo © (27.09.02 14:00)

Спасибо большое!


Fredericco   (2002-09-27 14:02:00) [28]

2Anatoly Podgoretsky © (27.09.02 13:58)

Уверен. Только что проверил в новом проекте.

[Error] Unit1.pas(107): Type "TMyRec" needs finalization - not allowed in file type
[Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"


MBo   (2002-09-27 14:00:00) [29]

FS.write(Rec.I, SizeOf(rec.I));
L:=Length(rec.s);
FS.write(L, SizeOf(L));
Fs.Write(rec.s[1],L);
...
fs.read(rec.i,SizeOf(rec.I));
fs.read(L,sizeof(Integer));
SetLength(rec.s,L);
Fs.read(rec.s[1],L);


Alx2   (2002-09-27 13:59:00) [30]

у меня такая конструкция проходит (D5 & D6)
type
TMyRec=record
I:integer;
S:String[255];
end;
Var f : file of tmyrec;

:)

Если D4 таки упрямится (что вряд ли), то попробуй

type
TStrArray = array [0..255] of char;
TMyRec=record
I:integer;
S:TStrArray;
end;
Var f : file of tmyrec;

а при работе использовать приведение типов

но имхо неэкономны файлы такого типа.


Anatoly Podgoretsky   (2002-09-27 13:58:00) [31]

Ты уверен, что ты записываешь именно эту структуру, эту можно, а про другие надо отдельно говорить.


Fredericco   (2002-09-27 13:49:00) [32]

2Anatoly Podgoretsky © (27.09.02 11:22)

[Error] Unit1.pas(103): Type "TDriver" needs finalization - not allowed in file type
[Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"


2MBo © (27.09.02 12:43)
Расскажи пожалуйста, если не трудно, как организовать чтение/запись MyRecчерез TFileStream, а то я сам не разобрался.


MBo   (2002-09-27 12:43:00) [33]

если в записи длинные строки или дин.массивы, File of TMyRec не пойдет, используй TFilestream, перед строкой записывая ее длину


Anatoly Podgoretsky   (2002-09-27 11:22:00) [34]

Данная структура может быть записана в файл без указания длины строки S


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо