Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2015, 22:10   #1
ridek
Пользователь
 
Регистрация: 30.07.2015
Сообщений: 16
По умолчанию Delphi - Incompatible types

Код:
type TSize = Record
        Bait: byte;
end;
var F: File of TSize;
       Size: Integer;
begin
Size:=0;
with OpenDialog1 do
 if Execute then
   begin
      AssignFile(F, FileName);
      Reset(F);
      while (not EOF(F)) do
        begin
          Size:=Size+1;
          seek(F, Size/(1024*1024));
        end;
   lbl23.Caption:=(IntToStr(Size));
   ComboEdit1.Text:= OpenDialog1.FileName;
   CloseFile(F);
  end;
Всем привет.
Помогите найти ошибку в этом коде (Incompatible types)

Последний раз редактировалось Аватар; 31.07.2015 в 22:15.
ridek вне форума Ответить с цитированием
Старый 31.07.2015, 22:17   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

В процедуре Seek второй аргумент должен быть целым.
А у вас там Size/(1024*1024).
Операция / всегда возвращает не целое , а действительное. Даже если 1/1
Потому что это Паскаль, а не Си.
type_Oleg вне форума Ответить с цитированием
Старый 31.07.2015, 22:18   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
seek(F, Size/(1024*1024));
деление интежер на интежер чего будет?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.07.2015, 23:22   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
type TSize = Record
Bait: byte;
end;
Это ты сам такое придумал или твой препод муд_к?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 31.07.2015, 23:34   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

min@y™, может это хитрость такая. Сказали надо файл записей, вот вам запись, самая простая, что может быть.
PS Правда, я не соображу, какова будет длина этой записи, с учетом, что record - не packed

Последний раз редактировалось type_Oleg; 31.07.2015 в 23:37.
type_Oleg вне форума Ответить с цитированием
Старый 31.07.2015, 23:45   #6
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

В зависимости от настроек среды, если память не подводит. И если две версии программы скомпилированные в разных средах с разными настройками попытаются работать с одним файлом - могут напороться. Так что по-хорошему нужно packed.
Лично я не понимаю смысла при первой итерации:
Код:
seek(F, 0.00000095367431640625);
ResourceSpace вне форума Ответить с цитированием
Старый 31.07.2015, 23:56   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
может это хитрость такая. Сказали надо файл записей, вот вам запись, самая простая, что может быть.
Тогда точно препод муд_к, вводит студентоту в заблуждение, т.к. нет связи между record и file of, кроме размера.
Вообще, наверное, это заблуждение обусловлено двойственностью понятия "запись" в английском диалекте американской мовы: "record"/"write".

Цитата:
И если две версии программы скомпилированные в разных средах с разными настройками попытаются работать с одним файлом - могут напороться.
а вот тут 100%-ный косяк безрукого инвалида-говнокодера. Безрукого, т.к. за такие косяки как раз руки и надо отрывать.
Цитата:
Так что по-хорошему нужно packed.
По хорошему, в данном случае, надо не packed record, а TFileStream. Я даже по этому поводу спорить не буду.

Цитата:
seek(F, 0.00000095367431640625);
Там компайлер и матерится. Имхо, автор промазал - попал сосиской по "/" всместо "*", они рядом на цифровом блоке клавы.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось Stilet; 01.08.2015 в 10:47.
min@y™ вне форума Ответить с цитированием
Старый 01.08.2015, 00:16   #8
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Цитата:
Имхо, автор промазал - попал сосиской по "/" всместо "*", они рядом на цифровом блоке клавы.
Даже если умножение - смысл какой подразумевался? Будет seek 1048576. Да и вообще - пока файл не закончится делаем seek со странными параметрами...
Цитата:
По хорошему, в данном случае, надо не packed record, а TFileStream.
Я имел ввиду что при работе с File Of <SomeRecord> нужно чтоб Record был Packed. А так да, TFileStream или TMemoryStream лучше само собою.
ResourceSpace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Incompatible types Почему? dimavit Общие вопросы Delphi 4 29.07.2012 12:13
Incompatible types MetR Помощь студентам 4 22.12.2011 18:31
incompatible types nupinh Общие вопросы Delphi 1 21.05.2011 23:18
Delphi Incompatible types Iogan Gamba Puti Помощь студентам 1 19.06.2008 13:45