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.


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)
Не открыл еще фирму по ясновидению? :)


Страницы:   1 2

Наверх

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