Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 24.09.2012, 23:05
micron18 micron18 вне форума
Прохожий
 
Регистрация: 20.09.2012
Сообщения: 14
Репутация: 10
По умолчанию

Спасибо :-) . Я пытался одной строкой всё сделать. Это только для String такая последовательность (сначала длина, потом сама строка) или для всех типов переменных так нужно делать?
Ответить с цитированием
  #17  
Старый 24.09.2012, 23:07
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Можно запись сделать и одной строкой (с использованием структуры), но расчёт всё равно займёт несколько строк.
Числовые переменные пишутся чеоез SizeOf.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
micron18 (24.09.2012)
  #18  
Старый 24.09.2012, 23:38
micron18 micron18 вне форума
Прохожий
 
Регистрация: 20.09.2012
Сообщения: 14
Репутация: 10
По умолчанию

Сделал так:
...
ЗАПИСЬ
Код:
I:=Length(St);
BlockWrite(F,I,SizeOf(I));
BlockWrite(F,St,Length(St));

ЧТЕНИЕ
Код:
BlockRead(F,I,SizeOf(I);
BlockRead(F,St,I);

St опять пустая (((

Последний раз редактировалось lmikle, 25.09.2012 в 08:01.
Ответить с цитированием
  #19  
Старый 24.09.2012, 23:40
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А так?
Код:
  BlockRead(F, I, SizeOf(I);
  SetLength(St, I);
  BlockRead(F, St, I);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #20  
Старый 24.09.2012, 23:50
micron18 micron18 вне форума
Прохожий
 
Регистрация: 20.09.2012
Сообщения: 14
Репутация: 10
По умолчанию

да, получилось )))
Спасибо
Ответить с цитированием
  #21  
Старый 25.09.2012, 06:28
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

Очень хорошо про это написано здесь http://www.gunsmoker.ru/2011/10/pascal.html
__________________
Код сырец
Ответить с цитированием
  #22  
Старый 25.09.2012, 10:18
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

более правильный вариант

Код:
I := Length(St);  
BlockWrite(F, I, SizeOf(I)); 
BlockWrite(F, St[1], Length(St)*SizeOf(St[1]));
И соответственно
Код:
BlockRead(F,I,SizeOf(I));
UniqueString(S);
SetLength(S,I);
BlockRead(F,S[1], Length(St)*SizeOf(St[1]));

Вариант с BlockRead(F,S, Length(St)) работал, потому что запись и чтение делалось в одной процедуре, а на самом деле писалось не то и читалось не туда(посмотрите что на самом деле записано в файл). Но поскольку писалось и читалось по одному и тому же адресу, то ошибка была не видна.
Ответить с цитированием
  #23  
Старый 25.09.2012, 11:19
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от icWasya
И соответственно
Код:
BlockRead(F,I,SizeOf(I));
UniqueString(S);
SetLength(S,I);
BlockRead(F,S[1], Length(St)*SizeOf(St[1]));
UniqueString здесь не нужна. Хотя конечно в таких случаях лучше перестраховаться
А вот с выражением SizeOf(St[1]) надо бы поосторожнее...
Ответить с цитированием
  #24  
Старый 25.09.2012, 22:00
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от icWasya
более правильный вариант
.
Да ну, а мужики то не знают.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter