Форум: "Начинающим";
Текущий архив: 2009.07.05;
Скачать: [xml.tar.bz2];
ВнизTWriter Найти похожие ветки
← →
fs (2009-05-15 15:52) [0]Столкнулся с проблемой: написал алгоритм сохранения записей класса наследника от TList. Вот собственно код:
procedure TBranchesBank.WriteTo(const AFileName: string);
var
P: PBranchBankItem;
i: Integer;
S: TStream;
W: TWriter;
begin
S := TFileStream.Create(AFileName, fmCreate);
try
W := TWriter.Create(S, 0);
try
for I := 0 to Count - 1 do
with P^ do
begin
P := PBranchBankItem(List[i]);
W.WriteInteger(Number);
W.WriteString(City);
W.WriteString(Address);
W.WriteString(Name);
W.WriteInteger(Code)
end;
finally
W.Free;
end;
finally
S.Free;
end;
end;
на строкеW.WriteInteger(Number);
прога вешается. Почему возникает ошибка не понятно.
← →
Palladin © (2009-05-15 15:54) [1]что за Number и Ко? откуда эти идентификаторы то взялись?
← →
Palladin © (2009-05-15 15:55) [2]
> with P^ do
> begin
> P := PBranchBankItem(List[i]);
дааааа.... гениально... не делите шкуру неубитого медведя, называется
← →
Медвежонок Пятачок © (2009-05-15 15:55) [3]это не читать, здесь рыбу заворачивали
← →
fs (2009-05-15 15:58) [4]
P := PBranchBankItem(List[i]);
-указатель на текущую записьP^.Number
← →
fs (2009-05-15 15:58) [5]
> with P^ do > begin> P := PBranchBankItem(List[i]);
> дааааа.... гениально... не делите шкуру неубитого медведя,
> называется
Блин перепутал ....
← →
Сергей М. © (2009-05-15 16:00) [6]Нашиша тут TWriter понадобился ? Только лишь из-за готовых методов записи основных типов данных ?
← →
Сергей М. © (2009-05-15 16:02) [7]
> fs (15.05.09 15:58) [4]
ты зачем ворнинги выключил ?)
← →
fs (2009-05-15 16:05) [8]все проблему решил. В конструкторе TWriter нужно болы в качестве Size указать $FF (PS. Непонятно что это означает)
procedure TBranchesBank.WriteTo(const AFileName: string);
var
P: PBranchBankItem;
i: Integer;
S: TStream;
W: TWriter;
begin
S := TFileStream.Create(AFileName, fmCreate or fmOpenWrite or fmShareDenyNone);
try
W := TWriter.Create(S, $FF);
with W do
try
WriteListBegin;
try
for I := 0 to Count - 1 do
with
begin
P := PBranchBankItem(List[i]);
WriteInteger(P^.Number);
WriteString(P^.City);
WriteString(P^.Address);
WriteString(P^.Name);
WriteInteger(P^.Code)
end;
finally
WriteListEnd;
end;
finally
Free;
end;
finally
S.Free;
end;
end;
← →
fs (2009-05-15 16:08) [9]
> Нашиша тут TWriter понадобился ? Только лишь из-за готовых
> методов записи основных типов данных ?
По моему намного удобнее, чем записывать самому в Stream.Write(....), особенно со строками?
← →
Медвежонок Пятачок © (2009-05-15 16:12) [10]трайтер был удобен лет сто назад, когда xml еще не изобрели
← →
Сергей М. © (2009-05-15 16:14) [11]
> проблему решил. В конструкторе TWriter нужно болы в качестве
> Size указать $FF
Ой не лукавь)
> with // куда пропало P^ do ?
> begin
> P := PBranchBankItem(List[i]);
> Непонятно что это означает
В справке же написано ..
← →
Сергей М. © (2009-05-15 16:16) [12]
> Медвежонок Пятачок © (15.05.09 16:12) [10]
Нашиша ему xml, если он не видел и видит отсутствие инициализации указателя в локальной переменной p, к которой обращается при with p^..
← →
Медвежонок Пятачок © (2009-05-15 16:26) [13]мне больше интересно что он завтра будет делать со своими файлами сделанными вчера, после того, как сегодня в структуре появятся новые члены или исчезнут старые.
или поменяется их порядок.
← →
fs (2009-05-15 16:34) [14]Пишу в общем-то курсовой и не вижу необходимости учитывать эти нюансы, тем более что количество и порядок членов структуры заранее определен согласно ТЗ.
← →
Медвежонок Пятачок © (2009-05-15 16:36) [15]вот это я понимаю.
в тз не только члены структуры описаны, но и порядок их следования при сериализации.
Использование райтера я так понимаю тоже в тз прописано?
← →
Сергей М. © (2009-05-15 16:37) [16]
> количество и порядок членов структуры заранее определен
> согласно ТЗ
А мне вот интересно, кто это ТЗ стряпал - препод или ты сам ?
Если сам, то почему не унаследовался от TComponent или хотя бы от TPersistent ?
← →
fs (2009-05-15 16:45) [17]
> Если сам, то почему не унаследовался от TComponent или хотя
> бы от TPersistent ?
Именно так я изначально и собирался организовать структуру, запись класс - TComponent. С сохранением и загрузкой из файла тогда бы вообще проблем не было (методы WriteComponent, ReadComponent (кажется так называются) использовал бы и все OK). Но препод ниче не шарящий в программухе сказал делать через Writer, Reader и все тут.
← →
Сергей М. © (2009-05-15 16:53) [18]
> препод ниче не шарящий в программухе сказал делать через
> Writer, Reader и все тут
Так ведь WriteComponent, ReadComponent неявно пользуют TWriter и TReader..
Ткни препода носом в генофонд и покажи, что эти классы действительно используются так-то и так-то ..
← →
Сергей М. © (2009-05-15 16:57) [19]Можно и DefineProperties + DefineProperty использовать для пущей наглядности - они прямиком ведут к явному использованию TReader/TWriter, столь любимым твоим преподом .. С одной лишь разницей - конструкторы и деструкторы этих классов ручками вызывать не придется, объекты эти создаются и уничтожаются автоматически
← →
fs (2009-05-15 17:04) [20]и действительно....., сделаю как советуете. Спасибо.
← →
Медвежонок Пятачок © (2009-05-15 17:07) [21]кроме того по текущей реализации:
нет вызовов райтлистбегин/енд
как при чтении файла будет контролироваться сколько там элементов в нем записано вчера?
только сбоку через позишн?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.07.05;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c