Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Типы файлов - переход от Паскаля к Дельфи 
:(
    Опции темы
bagira
  Дата 24.1.2004, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2858
Регистрация: 25.10.2003
Где: в тайге Уральских гор

Репутация: нет
Всего: 123



Ситуация такая: в течение нескольких лет происходит сбор данных некоторых технологических процессов с большого количества установок. Программы, разработанные мной в DOS Turbo Pascal 7, условно делятся на две группы: 1-сбор данных, 2 - обработка данных. После программы сбора данных происходит добавление записей в файлы (тип файла и структура записи - см. ниже). Программа математической обработки запускается пользователем позднее, выборочно, и, может быть, касается не всех созданных файлов.

Вот так описывается структура записи в Паскале (в старой программе):
---------
Код
type
    t0=array[1..200] of word;
    t7=array[1..10] of real;
    t8=array[1..10] of integer;


    t4=record
       name:String[5];
       smen:String[1];
       ust:Integer;
       kanal:Integer;
       rabo:String[2];
       zadan:t7;
       izmen:t8;
       cht:Integer;
       xt:t0;
    end;

Izd: t4;
Fp: file of t4;
---------------

Осуществляется переход к программам для Windows, которые я разрабатываю в Delphi 5.

Задача такая - организовать так называемый "переходный" период, когда действует и старая система, и также постепенно разрабатываются элементы новой. Т.е. нужно "научить" новую программу обработки понимать формат старых файлов с измерениями, "приспособить новое под старое".

Таких файлов с измерениями - десятки тысяч, записанных за несколько лет, и нет смысла менять структуру их самих. ФАЙЛЫ МЕНЯТЬ НЕЛЬЗЯ.

Мои действия по порядку:

1. Напрямую перенесла описания типов и переменных в новую программу. Структура файла распознается неверно.

2. Вместо String - везде пишу ShortString с заданием соответствующей длины строк SetLength. Нет результата.

3. Вместо Integer - SmallInt. Результат тот же.

4. Вместо Real - Real48. Не помогает.
5. Также безнадежны попытки приспособить и тип AnsiString.

6. Объявляю name:String[6], из структуры убираю Smen, а соответствующее значение пытаюсь получить как Copy(Izd.Name,6,1), но и это не помогает.

Проверка проводилась путем считывания первой записи из одного конкретного файла, содержимое которого известно заранее. Ни в одном случае правильно не определялась ни одна переменная, кроме первой (String[5]). Вторая Izd.Smen - пустая: "".

Не понимаю, почему такая несовместимость?! Может быть, уважаемые дельфисты подскажут что-нибудь?

Это сообщение отредактировал(а) Vit - 24.1.2004, 02:08


--------------------
Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил...
Ф.Х. Дагларджа (Турция)
http://zveriolginovour.ru/
https://vmeste.yandex.ru/zveriolginovour 
PM MAIL WWW ICQ   Вверх
Vit
Дата 24.1.2004, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Код
type
   t0=array[1..200] of word; не должно быть различий
   t7=array[1..10] of Single; ?? Не уверен, нет под рукой паскаля проверить...
   t8=array[1..10] of Smallint; Совершенно уверен что надо так менять


   t4=record
      name:String[5];не должно быть различий
      smen:String[1];не должно быть различий
      ust:Smallint;Совершенно уверен что надо так менять
      kanal:Smallint;Совершенно уверен что надо так менять
      rabo:String[2];не должно быть различий
      zadan:t7;не должно быть различий
      izmen:t8;не должно быть различий
      cht:Smallint;Совершенно уверен что надо так менять
      xt:t0;не должно быть различий
   end;

Izd: t4;не должно быть различий
Fp: file of t4;не должно быть различий



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 24.1.2004, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Если не получится, скажи, я тряхну стариной, установлю себе TP и попробую выяснить...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
bagira
Дата 24.1.2004, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2858
Регистрация: 25.10.2003
Где: в тайге Уральских гор

Репутация: нет
Всего: 123



Спасибо, Vit!

Итак - SmallInt оставляю, а вот со String[5] и String[1] все не просто. После первого элемента - как бы провал, пустая строка, хотя там точно должен быть символ...

Насчет Single - проверю завтра по книге.



--------------------
Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил...
Ф.Х. Дагларджа (Турция)
http://zveriolginovour.ru/
https://vmeste.yandex.ru/zveriolginovour 
PM MAIL WWW ICQ   Вверх
dm9
Дата 24.1.2004, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



Насчёт Real
Читаем в Фаронове: Если хотим использовать старый Real, который был в Delphi 1-3, включаем директивку {$REALCOMPATIBILITY ON}.

Попробуй оставить String-и как были.

В общем, я бы написал так:

Код
---------
{$REALCOMPATIBILITY ON}
type
t0=array[1..200] of word;
t7=array[1..10] of Real;
t8=array[1..10] of SmallInt;


t4=record
name:String[5];
smen:String[1];
ust:SmallInt;
kanal:SmallInt;
rabo:String[2];
zadan:t7;
izmen:t8;
cht:SmallInt;
xt:t0;
end;

Izd: t4;
Fp: file of t4;
---------------


Это сообщение отредактировал(а) dm9 - 24.1.2004, 02:35
PM MAIL ICQ   Вверх
dm9
Дата 24.1.2004, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



bagira, если ты прочитала мой старый вариант предыдущего сообщения, забудь об этом бреде... Я исправил. Говорю это, так как ты сейчас в форуме и могла увидеть, что там было написано... Мне надо быть внимательнее...
PM MAIL ICQ   Вверх
bagira
Дата 24.1.2004, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2858
Регистрация: 25.10.2003
Где: в тайге Уральских гор

Репутация: нет
Всего: 123



Dm9, спасибо, проверю оба варианта... Но, по-моему, наибольшая проблема - именно в String, так как не читается уже сразу после первого элемента в начале файла.




--------------------
Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил...
Ф.Х. Дагларджа (Турция)
http://zveriolginovour.ru/
https://vmeste.yandex.ru/zveriolginovour 
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 24.1.2004, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



А может нужно сделать packed record? Хотя я не знаю какие записи были в Паскале(может они там по умолчанию упакованые)

Это сообщение отредактировал(а) <Spawn> - 24.1.2004, 06:54


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Paradox
Дата 24.1.2004, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Код
String[1]
имеет ли смысл ? может char попробовать
К тому же по-моему переменная типа стринг занимает минимум два байта, может в этом проблема
А может я и не прав

Это сообщение отредактировал(а) Paradox - 24.1.2004, 07:04


--------------------
---
PM MAIL WWW   Вверх
<Spawn>
Дата 24.1.2004, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Paradox Да два байта, причем не важно какая это string - паскалевская, с первым байтом указывающим размер строки или указатель на строку с null-terminated окончанием(В зависимости от $H+/$H-).

to bagira : я вот еще что думаю, попробуй функцией sizeof сравнить размер структуры в паскале и в Дельфе, чтобы посмотреть на сколько байтиков они различаются.

Это сообщение отредактировал(а) <Spawn> - 24.1.2004, 08:05


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
December
Дата 24.1.2004, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



bagira
если структура везде одна и та же, не проще ли сделать процедуру-адаптер через fileRead, fileWrite?


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 24.1.2004, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Bagira, тебе осталось соединить вместе высказанные советы:
integer->smallint
real->real48 (или {$REALCOMPATIBILITY ON})
word, string - без изменений
и t4 = packed record
Код
type
  t0=array[1..200] of word;
  t7=array[1..10] of real48;
  t8=array[1..10] of Smallint;

  t4=packed record
     name:String[5];
     smen:String[1];
     ust:Smallint;
     kanal:Smallint;
     rabo:String[2];
     zadan:t7;
     izmen:t8;
     cht:Smallint;
     xt:t0;
  end;

Попробуй так - уверен, у тебя получится (по-крайней мере, у меня совпадают)...

А packed нужен, т.к.
Цитата
The reserved word packed can prefix an array type declaration.
However, it has no effect in Turbo Pascal, since packing occurs
automatically.
Но в Delphi он не автоматический...



--------------------
С уважением, г-н Посол.
PM   Вверх
bagira
Дата 24.1.2004, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2858
Регистрация: 25.10.2003
Где: в тайге Уральских гор

Репутация: нет
Всего: 123



Благодарю всех, кто принял участие в обсуждении!

Packed Record - вот в чем была проблема. Таким образом, заработал последний предложенный вариант (включающий: SmallInt, Real48, String, Word, Packed Record).

Какие вы все молодцы!





--------------------
Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил...
Ф.Х. Дагларджа (Турция)
http://zveriolginovour.ru/
https://vmeste.yandex.ru/zveriolginovour 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.