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

Главная категория => Таверна "Три вискаря и воблу!" => Компьютеры => Тема начата: arcanis от 05 ноября 2009, 12:35

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

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

Соответственно возникает разумный вопрос - где косяк в моих действиях и как его исправить или на какой язык перейти на этот раз? ;)
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: Селин от 05 ноября 2009, 13:33
Чего-чего?
Надо чужой файл крякнуть (разобрать неизвестный формат, зная результат) или написать свою прогу, которая будет выводить в такой же файл (а следовательно, надо разобрать неизвестный формат итд...)?
вообще задачу не понимаю.
файл оно скорее всего выдает бинарный, при чем тут кодировка?
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: arcanis от 05 ноября 2009, 13:41
проги юзают свой формат .hin и .pdb & .ste
нужно прочитав файл .hin разбить его на запчасти и перезаписать в .pdb и .ste
ах да, при просмотре дебагера например в Сях видно что он читает символы то нормально
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: Селин от 05 ноября 2009, 13:46
не понимаю. если структура файла (или всех трех файлов) неизвестна, то как писать конвертер?
наверно, надо сначала разобраться, как там лежат данные и что они значат?
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: arcanis от 05 ноября 2009, 13:48
что какой столбец означает я знаю точно соответственно где лежат тоже знаю (иначе бы просто не смог бы написать ввод данных, который вообще то работает)
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: Селин от 05 ноября 2009, 13:55
слушай, а в чем проблема открыть как бинарник и считывать/записывать тоже как бинарник? или там оно в текстовом виде лежит?

PS. ANSI/Unicode там случайно не путаются (как самые простые грабли)?
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: arcanis от 05 ноября 2009, 14:04
по поводу ansi/unicode в первую очередь проверил, попытавшись перекодировать исходник...перекодировать то перекодировал, да вот толку не возымело, а еще пробовал iso, koir и windows
текст лежит
была правд идейка писать под арчлинуксом, но мне все лень
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: Селин от 05 ноября 2009, 14:23
т.е. оба файла ANSI и она (твоя прога) у тебя выводит в текстовый файл в каком-то бредовом формате вместо текста, который можно читать (хотя бы визуально, а не прогой #2)?
вообще чисто программный косяк должен быть - работа с файлами не имеет отношения к работе с БД, это простая операция и должна проходить в любом языке.
может, ты файл открываешь как бинарный и используешь функции вывода, с которыми работают в текстовой моде, и она пишет чепуху?
посмотри твой конечный файл в 16-ричном формате каким-нить редактором, может, наведет на мысль )))

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

ps2. а примерные строчки в начальном файле какие?
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: arcanis от 05 ноября 2009, 14:57
строка исходника
Цитировать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 ее не воспринимает.

ЗЫ была идейка переписать текст проги В на фортране, чтобы сразу он их и обрабатывал ;) опять же это надо фортран втыкать.
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: Селин от 05 ноября 2009, 15:31
Си работают в 8-битной имхо... кодировка же вроде варьируется только когда символы больше 0x7F, а до этого все одинаковые (а unicode пишется два байта, а не один).

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

а что такое "свинья"? :o
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: arcanis от 05 ноября 2009, 15:41
свинья - windows xp

ну по поводу "Си работают в 8-битной имхо..." мог я и перепутать :D
выдает не указатель а значение, блин на наличие таких банальных багов я сразу проверил :D однако не берусь с уверенностью утверждать что там больше нету багов ;)
циферки они везде переходять в непонятно что есть например фрагмент
Цитироватьyz{|z{|
что должно соответствовать примерно этому
Цитировать19 CT
опять же по словам того же программиста, такая фишка вполне естественнна :( а вот как обойти это он затрудняется ответить :)
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: Селин от 05 ноября 2009, 15:56
Хм. Мистика. Может, тебя порча потихоньку доедает вместе с твоими сями? )))
в XP у меня никогда в жизни ничего не глючило, кроме глюков, которые мы сами насажали в наш софт. )))

я бы на VB (или VBA, который можно открыть в любом вордовском файле) написала, но тебе тоже придется впиливать :( оно точно без глюков выводит...
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: arcanis от 05 ноября 2009, 16:10
[off-topic]дык саидин же вроде очистили :D или я что то пропустил ??? [/off-topic]
да нафиг, мне и самому интересно что же должно получиться там и как ;)
на самом деле прост обидно - даж и не знаешь с какой стороны подступиться, точней знаешь - нада просто что то более современное использовать под соответствующую платформу, но это же так нудно [mde]
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: Селин от 05 ноября 2009, 16:34
[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 ))
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: arcanis от 05 ноября 2009, 18:12
вба писался на платформе базика, ага? а базик хреново со сотроками оперирует ;)
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: JustAMan от 05 ноября 2009, 22:27
Так, не компостируй мозг :) В твоём случае бери тот язык, что лучше всего знаешь. Хотя в плане работы со строками Паскаль проще, но имеет ограничение на длину строки. Можешь попробовать Делфи, где это ограничение (255 символов) увеличено до 65535. Это во-первых.

Во-вторых, линукс-не линукс - кодировки от этого не зависят. Семибитные-не семибитные - вообще фигня, при чём тут это? Работай как с бинарником, а не с текстом, и не парь моск ;)
Во-вторых, латинские буквы ('y', 'w') выглядят и кодируются одинаково в любой кодировке. Поэтому ищи глюк ввода :)

Задача смотрится тривиальнейшей, на полчаса. Были бы чёткие правила перевода одного в другое - на пасе бы легко накидал.

P.S. VBA = Visual Basic for Applications
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: Луан от 05 ноября 2009, 23:22
Тогда уж не Паскаль, а Дельфи - там ограничений на длину строки нет. Хотя писать на Дельфях консольное приложение - то еще извращение.
В любом случае - если формат файла известен, то задача достаточно легко, хотя и очень нудно, решаема.
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: JustAMan от 09 ноября 2009, 00:33
Ну если уж быть совсем занудой, то ограничение на 255 символов - только в Turbo/Borland Pascal. Паскалей же вообще масса, например, Free Pascal в последних версиях не только поддерживает классы, как Delphi, и делает многое другое, но и поддерживает аналог шаблонов из С++.

Кстати, не вижу проблем в консольных приложениях на Дельфях. Смотря что надо. В случае конвертора консоль - самое оно ;) Ничего лишнего. Два-три writeln на всю прогу ::)
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: arcanis от 09 ноября 2009, 00:44
блин издеваешься?  :o я б хотя б хоть че нить в делфях знал б ;)
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: JustAMan от 09 ноября 2009, 01:23
Создай консольное приложение и пиши как в "трубе", разве что файл с переменной связывай не Assign, а AssignFile, а закрывай не Close, а CloseFile, вся разница ;)

Кстати, версия Turbo Delphi (одна из последних) для использования в некоммерческих целях бесплатна ;)
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: arcanis от 09 ноября 2009, 01:30
ааааа....не тру ;)
ссас вот пытаюсь с харановским питоном справиться, тип вроде даж должна работать - уже написанная прога, но при моей попытке запуска, посылает далеко и надолго
Название: Re: Perl vs C vs [здесь может быть ваша реклама]
Отправлено: arcanis от 16 апреля 2010, 00:02
я мудагг с большой буквы :D