Яндекс.Метрика Perl vs C vs [здесь может быть ваша реклама]

Цитадель Детей Света. Возрождённая

Цитадель Детей Света. Возрождённая

Новости:

Потеряли галерею, шахматы и все файлы-вложения, если вы когда-то грузили их на сервер

Perl vs C vs [здесь может быть ваша реклама]

Автор arcanis, 05 ноября 2009, 12:35

« назад - далее »

arcanis

Представим себе некоторую полумифическую программу A которая использует ММД (метод молекулярной динамики) для анализа движения молекул. При этом эту программу писали буржуи и там ничего кроме наглядности хорошего нету. Прога А написана на хрен знает чем.
Представим себе совсем мифическую программу В которая делает тоже самое но лишена наглядности, зато результат более правдоподобный. Прога В написана на Фортране...(!) :-\
Обе программы сохраняют циферки и буковки в одних только им известных файлах. Есно они прекрасно читаются в блокноте.
Раньше переводили методом набора данных, но представьте себе молекулу пропанола (12 атомов), окруженную 1000 молекулами воды (3х1000 атомов)...да я буду переписывать эти ~6050 строчек до второго пришествия. Простой метод ctrl+c - ctrl+v тоже не канает, ибо они записаны ну совсем по разному.
Задача перевести из одного формата в другой.

Я знаю хорошо тока 2 языка - Ся и Паскаль, немного еще Базик. Сел прогать на Сях. При выводе в конечный файл возникает проблемма с кодировкой и в ответе иероглифы, беспорядочный набор буковок и тд в зависимости от того какую кодировку для чтения я выберу. Скрипты из валявшихся в инете не один не берет. Специальные проги тоже.
Обратился к знакомому программисту, он предложил заюзать Перл, который предназначен для работы с БД и в общем то к тому же сильно похож на Ся - ибо создавался на его основе.
НО! Переписав на Перл ввод + часть вывода возникает таже самая проблема.

Соответственно возникает разумный вопрос - где косяк в моих действиях и как его исправить или на какой язык перейти на этот раз? ;)

Действительный член клуба Зануд

Селин

Чего-чего?
Надо чужой файл крякнуть (разобрать неизвестный формат, зная результат) или написать свою прогу, которая будет выводить в такой же файл (а следовательно, надо разобрать неизвестный формат итд...)?
вообще задачу не понимаю.
файл оно скорее всего выдает бинарный, при чем тут кодировка?

arcanis

проги юзают свой формат .hin и .pdb & .ste
нужно прочитав файл .hin разбить его на запчасти и перезаписать в .pdb и .ste
ах да, при просмотре дебагера например в Сях видно что он читает символы то нормально

Действительный член клуба Зануд

Селин

не понимаю. если структура файла (или всех трех файлов) неизвестна, то как писать конвертер?
наверно, надо сначала разобраться, как там лежат данные и что они значат?

arcanis

что какой столбец означает я знаю точно соответственно где лежат тоже знаю (иначе бы просто не смог бы написать ввод данных, который вообще то работает)

Действительный член клуба Зануд

Селин

слушай, а в чем проблема открыть как бинарник и считывать/записывать тоже как бинарник? или там оно в текстовом виде лежит?

PS. ANSI/Unicode там случайно не путаются (как самые простые грабли)?

arcanis

по поводу ansi/unicode в первую очередь проверил, попытавшись перекодировать исходник...перекодировать то перекодировал, да вот толку не возымело, а еще пробовал iso, koir и windows
текст лежит
была правд идейка писать под арчлинуксом, но мне все лень

Действительный член клуба Зануд

Селин

#7
т.е. оба файла ANSI и она (твоя прога) у тебя выводит в текстовый файл в каком-то бредовом формате вместо текста, который можно читать (хотя бы визуально, а не прогой #2)?
вообще чисто программный косяк должен быть - работа с файлами не имеет отношения к работе с БД, это простая операция и должна проходить в любом языке.
может, ты файл открываешь как бинарный и используешь функции вывода, с которыми работают в текстовой моде, и она пишет чепуху?
посмотри твой конечный файл в 16-ричном формате каким-нить редактором, может, наведет на мысль )))

ps. если у тебя линукс, то я в нем ни в зуб ногой, я только мелкософт умею. ))))

ps2. а примерные строчки в начальном файле какие?

arcanis

строка исходника
Цитироватьatom 1 - C CT - -0.1076779 0.5940512 0.124113 1.429744 4 2 s 4 s 5 s 6 s
строка .pdb
ЦитироватьATOM      1 CT   ISO     1       0.263  -0.727  -0.218
строка .ste
Цитировать1 CT     2   3   4   6   0 12 -0.108    0  0.000 ____ ..
на самом деле текст связный ;) циферки формата дабл разные потому что разные системы смотрелись
пробная строка (не полностью, cсоответствующа в pdb части
ЦитироватьATOM      1 CT   
)
ЦитироватьATOM      yw
слово АТОМ вбивалось прогой, а дальше буковки должны браться из исходника. Забавно что a[1][11] = 'C', a[1][12] = 'T' а на выводе они выглядят как a[1][11] = 'y', a[1][12] = 'w'
кодировка пробника в этом примере ansi

нет у мя щас свинья, прост насколько я знаю на линухе нету такого геммороя с кодировками

исходник (pdb) в ansi сохранен. Итоговый по умолчанию сохраняется в unicode (есно). Однако насколько знаю ся работает в 7-битной (или 8-...че та память подводит уже, в общем в корявой ;) ) кодировке (koir некоторые и iso).

Пробовал и в hex-кодировке открывать, ничего хорошего не увидел, даже данные пробовал варьировать (в смысле тип - ну там русские буковки, латиница, циферки, символы). Читать можно, а вот прога B ее не воспринимает.

ЗЫ была идейка переписать текст проги В на фортране, чтобы сразу он их и обрабатывал ;) опять же это надо фортран втыкать.

Действительный член клуба Зануд

Селин

Си работают в 8-битной имхо... кодировка же вроде варьируется только когда символы больше 0x7F, а до этого все одинаковые (а unicode пишется два байта, а не один).

никакой логической связи между латинским CT и yw найти не могу... у тебя там точно нет багов в духе "записал в файл не значение переменной, а указатель на нее"? Там же еще единица была и пропала, тоже странно.
в общем имхо надо багу искать, почему пишет не то, что прочитала... имхо это все-таки баг в коде. "Во всякой программе всегда есть еще одна ошибка" (с) народное )))

а что такое "свинья"? :o

arcanis

свинья - windows xp

ну по поводу "Си работают в 8-битной имхо..." мог я и перепутать :D
выдает не указатель а значение, блин на наличие таких банальных багов я сразу проверил :D однако не берусь с уверенностью утверждать что там больше нету багов ;)
циферки они везде переходять в непонятно что есть например фрагмент
Цитироватьyz{|z{|
что должно соответствовать примерно этому
Цитировать19 CT
опять же по словам того же программиста, такая фишка вполне естественнна :( а вот как обойти это он затрудняется ответить :)

Действительный член клуба Зануд

Селин

Хм. Мистика. Может, тебя порча потихоньку доедает вместе с твоими сями? )))
в XP у меня никогда в жизни ничего не глючило, кроме глюков, которые мы сами насажали в наш софт. )))

я бы на VB (или VBA, который можно открыть в любом вордовском файле) написала, но тебе тоже придется впиливать :( оно точно без глюков выводит...

arcanis

[off-topic]дык саидин же вроде очистили :D или я что то пропустил ??? [/off-topic]
да нафиг, мне и самому интересно что же должно получиться там и как ;)
на самом деле прост обидно - даж и не знаешь с какой стороны подступиться, точней знаешь - нада просто что то более современное использовать под соответствующую платформу, но это же так нудно [mde]

Действительный член клуба Зануд

Селин

[off-topic]Если ВПТ заразил саидин вирусом, а вирус потом подцепили те, кто коннектился к саидин, то... значит, саидин очистили, а в направляющих он остался (потому что снова заразить саидин, пробив мощный файрволл, может только ВПТ, а жалкие людишки на такое никак не способны) :D Вряд ли Ранд мог поработать антивирусом для всех мозгофф Рандляндии ;)[/off-topic]

ну открой VB Editor в ворде и напиши там что-нить типа

Public Sub Run1()
dim str1 as string
dim str2 as string
    str1 = "saidin"
    str2 = "saidar"
    Open "d:\ds.log" For Append As #1
    Print #1, "Channel " & str1 & " and " & str2
    Close #1
End Sub


далее нажимаешь кнопку Run, и выведет строку как миленькое.
Читать файл аналогичными командами, это еще наследие невизуального бейсика, поэтому просочилось аж в VBA - посмотри help ))

arcanis

вба писался на платформе базика, ага? а базик хреново со сотроками оперирует ;)

Действительный член клуба Зануд