![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись в файл переменной типа string. [D4, Win95/98]
Fredericco © (2002-09-27 11:12:00)Привет уважаемые мастера!
У меня вот такой вопрос. Есть рекорд
TMyRec=record
I:integer;
S:String[255];
end;
и файл
F:File of TMyRec;
Данная структура не может быть записана в файл если не указать длину строкиS. Так вот, кто уже с этим сталкивался, подскажите пожалуйста как правильней всего записывать строки большей длины.
С уважением к Мастерам.
Fredericco.
Alx2 (2002-09-27 16:05:00) [1]>Sectey © (27.09.02 15:52)
>Да все правельно.
point, конечно, не pointer - но это просто опечатка.
Sectey (2002-09-27 15:59:00) [2]>Fog © (27.09.02 15:54)
В файл же надо сохранить данные, а НЕ АДРЕСА где располагаются данные.
Fog (2002-09-27 15:54:00) [3]А что если
File of PChar;
.
.
.
Write(.., PChar(Твой стринг));
Sectey (2002-09-27 15:52:00) [4]>Alx2 © (27.09.02 15:46)
Да все правельно.
Передаем записи и чтения данные string, а не переменную String.
Alx2 (2002-09-27 15:46:00) [5]
procedure WriteStr(str: string);
var
s : TFileStream;
l : integer;
begin
s := TFileStream.Create("sdsds",fmCreate);
l := length(str);
s.WriteBuffer(l,sizeof(l));
s.WriteBufffer( point(str)^,l);
s.Free
end;
function ReadStr: string;
var
s : TFileStream;
l : integer;
b : string;
begin
s := TFileStream.Create("sdsds",fmCreate);
s.ReadBuffer(l,sizeof(l));
SetLength(b,l);
s.ReadBufffer( point(b)^,l);
s.Free;
result := b;
end;
Sectey (2002-09-27 15:35:00) [6]Alx2 © (27.09.02 15:26)
В чем?
Рыжик (2002-09-27 15:26:00) [7]Имелось в виду, конечно, {$H+} для просто string. Сперва не правильно поняла, о чём речь. Прошу прощения за невнимательность.
Alx2 (2002-09-27 15:26:00) [8]>Sectey © (27.09.02 15:08)
>Sectey © (27.09.02 15:08)
>О Ш И Б С Я.
И не только там.
Anatoly Podgoretsky (2002-09-27 15:18:00) [9]Рыжик © (27.09.02 14:52)
По ошибке MBO адресовал, для string[255] без разницы
Fredericco (2002-09-27 15:08:00) [10]Sectey © (27.09.02 15:06)
Спасибо!
Sectey (2002-09-27 15:08:00) [11]О Ш И Б С Я.
b : string;
begin
s := TFileStream.Create("sdsds",fmOpenRead);
s.ReadBuffer(l,sizeof(l));
Sectey (2002-09-27 15:06:00) [12]procedure WriteStr(str: string);
var
s : TFileStream;
l : integer;
begin
s := TFileStream.Create("sdsds",fmCreate);
l := length(str);
s.WriteBuffer(l,sizeof(l));
s.WriteBufffer(point(str)^,l);
s.Free
end;
function ReadStr: string;
var
s : TFileStream;
l : integer;
b : string;
begin
s := TFileStream.Create("sdsds",fmCreate);
s.ReadBuffer(l,sizeof(l));
SetLength(b,l);
s.ReadBufffer(point(b)^,l);
s.Free;
result := b;
end;
Anatoly Podgoretsky (2002-09-27 15:03:00) [13]MBo © (27.09.02 14:00)
Если про String[255] то ошибки не будет, если просто про String, то для {$H-} это навносильно String[255] оно же ShortString без всяких директив
pasha_golub (2002-09-27 14:56:00) [14]
> Рыжик © (27.09.02 14:52)
Абсолютно прав (права)!!!
Рыжик (2002-09-27 14:52:00) [15]
> Anatoly Podgoretsky © (27.09.02 14:14)
> Я не из головы беру, откомпилировано без единого предупреждения
> и выполнено без единой ошибки, файл как и ожидалось оказался
> ровно 260 байт и строго нужного содержания.
> У тебя яно не тот код, который приведен в сообщении Fredericco
> © (27.09.02 11:12)
А у вас случайно не стоит {$H-}?
Потому что, если {$H+}, то ошибка должна быть.
Fredericco (2002-09-27 14:42:00) [16]2Anatoly Podgoretsky © (27.09.02 14:32)
> Налицо полное не понимание принципов
Налицо невнимательное чтение.
Fredericco (2002-09-27 14:38:00) [17]Помимо приведенной структуры, был еще приведен текст, на прочтение которого автор вопроса рассчитывал.
Anatoly Podgoretsky (2002-09-27 14:32:00) [18]MBo © (27.09.02 14:16)
Это будет другая структура, такая структура не имеет смысла для типизированныйх файлов, компилятор даже отказывается подобное компилировать. Налицо полное не понимание принципов.
Нужно использовать не типизированный файл, а двоичный с переменной структурой, с примером повторяться не буду, ты его привел в MBo © (27.09.02 14:00)
Мое сообщение Anatoly Podgoretsky © (27.09.02 11:22) и последующие только по приведенной структуре.
Alx2 (2002-09-27 14:29:00) [19]>Данная структура не может быть записана в файл если не указать
>длину строки S.
И потом, в выясненном смысле, эта структура уже не "данная".
Alx2 (2002-09-27 14:28:00) [20]>Fredericco © (27.09.02 14:17)
> быть записана в файл если не указать
> длину строки S
Теперь все понятно.
НО!
Длина строки <> ее размерность :))
Длина = length
>MBo © (27.09.02 14:16)
Не открыл еще фирму по ясновидению? :)