![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| bagira |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
Ситуация такая: в течение нескольких лет происходит сбор данных некоторых технологических процессов с большого количества установок. Программы, разработанные мной в DOS Turbo Pascal 7, условно делятся на две группы: 1-сбор данных, 2 - обработка данных. После программы сбора данных происходит добавление записей в файлы (тип файла и структура записи - см. ниже). Программа математической обработки запускается пользователем позднее, выборочно, и, может быть, касается не всех созданных файлов.
Вот так описывается структура записи в Паскале (в старой программе): ---------
Осуществляется переход к программам для 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 |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
-------------------- 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 |
|||
|
||||
| Vit |
|
|||
![]() 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 |
|||
|
||||
| bagira |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
Спасибо, Vit!
Итак - SmallInt оставляю, а вот со String[5] и String[1] все не просто. После первого элемента - как бы провал, пустая строка, хотя там точно должен быть символ... Насчет Single - проверю завтра по книге. -------------------- Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил... Ф.Х. Дагларджа (Турция) http://zveriolginovour.ru/ https://vmeste.yandex.ru/zveriolginovour |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
Насчёт Real
Читаем в Фаронове: Если хотим использовать старый Real, который был в Delphi 1-3, включаем директивку {$REALCOMPATIBILITY ON}. Попробуй оставить String-и как были. В общем, я бы написал так:
Это сообщение отредактировал(а) dm9 - 24.1.2004, 02:35 |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
bagira, если ты прочитала мой старый вариант предыдущего сообщения, забудь об этом бреде... Я исправил. Говорю это, так как ты сейчас в форуме и могла увидеть, что там было написано... Мне надо быть внимательнее...
|
|||
|
||||
| bagira |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
Dm9, спасибо, проверю оба варианта... Но, по-моему, наибольшая проблема - именно в String, так как не читается уже сразу после первого элемента в начале файла.
-------------------- Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил... Ф.Х. Дагларджа (Турция) http://zveriolginovour.ru/ https://vmeste.yandex.ru/zveriolginovour |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
А может нужно сделать packed record? Хотя я не знаю какие записи были в Паскале(может они там по умолчанию упакованые)
Это сообщение отредактировал(а) <Spawn> - 24.1.2004, 06:54 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Paradox |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
К тому же по-моему переменная типа стринг занимает минимум два байта, может в этом проблема А может я и не прав Это сообщение отредактировал(а) Paradox - 24.1.2004, 07:04 -------------------- --- |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Paradox Да два байта, причем не важно какая это string - паскалевская, с первым байтом указывающим размер строки или указатель на строку с null-terminated окончанием(В зависимости от $H+/$H-).
to bagira : я вот еще что думаю, попробуй функцией sizeof сравнить размер структуры в паскале и в Дельфе, чтобы посмотреть на сколько байтиков они различаются. Это сообщение отредактировал(а) <Spawn> - 24.1.2004, 08:05 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| December |
|
|||
![]() Antitheorist ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4423 Регистрация: 14.8.2002 Где: Харьков Репутация: 8 Всего: 57 |
bagira
если структура везде одна и та же, не проще ли сделать процедуру-адаптер через fileRead, fileWrite? |
|||
|
||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Bagira, тебе осталось соединить вместе высказанные советы:
integer->smallint real->real48 (или {$REALCOMPATIBILITY ON}) word, string - без изменений и t4 = packed record
Попробуй так - уверен, у тебя получится (по-крайней мере, у меня совпадают)... А packed нужен, т.к.
-------------------- С уважением, г-н Посол. |
||||
|
|||||
| bagira |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
Благодарю всех, кто принял участие в обсуждении!
Packed Record - вот в чем была проблема. Таким образом, заработал последний предложенный вариант (включающий: SmallInt, Real48, String, Word, Packed Record). Какие вы все молодцы! -------------------- Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил... Ф.Х. Дагларджа (Турция) http://zveriolginovour.ru/ https://vmeste.yandex.ru/zveriolginovour |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |