Export JCAMP to ASCII
Export JCAMP to ASCII
Не знаю в какой раздел вопрос запостить. Наверное, ближе всего к этому.
Ищу программу, которая бы экспортировала UV\VIS JCAMP-файлы (*.dx) в ASCII. Желательно, чтобы она делала это в режиме командной строки.
Буду признателен за любую информацию.
Ищу программу, которая бы экспортировала UV\VIS JCAMP-файлы (*.dx) в ASCII. Желательно, чтобы она делала это в режиме командной строки.
Буду признателен за любую информацию.
Есть "примочка" для импорта этих файлов в Origin'е. Экспорт в ASCII из Origin'а трудностей не представляет.
Да, я знаю про нее. Нашел даже программку, которая использует jcamp.dll (на основе которой работает указанная "примочка")как раз в режиме командной строки и экспортирует dx в ASCII. Пробовал также вызывать процедуру экспорта непосредственно из этой DLL. С моими файлами не работает ни один из способов.bf109xxl писал(а):Есть "примочка" для импорта этих файлов в Origin'е. Экспорт в ASCII из Origin'а трудностей не представляет.
Нашёл спецификацию (-> exchange). Потрясён маразматичностью формата; его придумали какие-то безрукие дебилы и вредители, хуже нас.
Что же до трансформации, то с ней примерно как-то так: (Код, мягко говоря, далёк от идеала - так, набросок. На этом файле вроде прокатывает.)
Что же до трансформации, то с ней примерно как-то так:
Код: Выделить всё
foreach $file(@ARGV){
open(WF,$file);
$file=~s/\.dx/\.txt/;
open(OUTF,">$file");
while (<WF>){
chomp;
next if $_ eq "";
next if m/^\(.*\)$/;
if (m/^##/){
($name,$value)=split /=/;
$name=~s/#//g;
$$name=$value;
print OUTF "\n$_\n" if m/title/i;
$y=$i=0;
}else{
s/([^\d])/ $1/g;
s/([a-r])/-uc$1/eg;
tr/\@ABCDEFGHI\%JKLMNOPQR/01234567890123456789/;
split / /;
$x0=shift @_;
$y0=shift @_;
if ($i==0){
$i=$MINX+0;
unshift @_, $y0;
}
print OUTF ($i++)."\t".($y+=$_)*$YFACTOR."\n" foreach @_;
}
}
close(WF);
close(OUTF);
}
Спасибо!
А на чем это написано? Java?
А на чем это написано? Java?
Последний раз редактировалось Al_chimic Вс мар 09, 2008 11:35 am, всего редактировалось 1 раз.
Работает! Спасибо огромное.ИСН писал(а):Спасибо скажете, когда (и если) заработает. Это Перл; запускалка для него (perl.exe и одна dll) либо где-то на activestate.com вроде была, либо возьмите ту, которую amge с месяц назад присылал (она в exchange, болтается где-то в середине всей простыни).
А Perl жесть какая-то.
-
eukar
Спасибо, буду обращатьсяИСН писал(а):Вот теперь - пожалуйста. Обращайтесь, если чо.
(при чуточку других параметрах всё может искривиться, я ведь затачивался на один этот файл.)
А Перл - да... Я-то в нём чужак, бредущий наощупь, "май нэйм из Вася", а продвинутые товарищи на нём выдают такие загибы, что понюхал одну строчку - и готов.
Я и сам тут пытаюсь вникнуть. Почитал про формат jcamp немного. Как я понял, в моих файлах используется формат сжатия SQZ-DIF.
Например, первая строка из первого блока:
Код: Выделить всё
10766c2370k045J027L49N36K483j509K68J286k103O55J69J889K415j269j58q7J155J820
Ваш скрипт не учитывает дубликаты, правильно?
Вот, вот. Вот этот комитет "сугубо надо вешать на вонючих верёвках". Ну да это так, в сторону.
Да, верно, там преобразование DIF. И потом сжатие DUP (в форматах графических файлов аналогичный подход называется RLE, и был вытеснен более прогрессивными форматами ещё в конце 80-х; но там он хоть имел смысл, а здесь изначально не имеет). Да, я тупо наплевал на дубликаты; это приводит к тому, что символ двукратного дублирования остаётся как есть (буквой), а при сворачивании невозбранно кастится в целое число (в 0), и немножко сбивает все дальнейшие ординаты. Трёхкратные и более дубликаты (в этом файле, кажется, единственный случай был) приводят к выпадению точек.
Не, ну если так-то поразмыслить, то ведь можно и учесть. После строки 18 вставьте: и другие последующие буквы, по вкусу.
Да, верно, там преобразование DIF. И потом сжатие DUP (в форматах графических файлов аналогичный подход называется RLE, и был вытеснен более прогрессивными форматами ещё в конце 80-х; но там он хоть имел смысл, а здесь изначально не имеет). Да, я тупо наплевал на дубликаты; это приводит к тому, что символ двукратного дублирования остаётся как есть (буквой), а при сворачивании невозбранно кастится в целое число (в 0), и немножко сбивает все дальнейшие ординаты. Трёхкратные и более дубликаты (в этом файле, кажется, единственный случай был) приводят к выпадению точек.
Не, ну если так-то поразмыслить, то ведь можно и учесть. После строки 18 вставьте:
Код: Выделить всё
s/(-?\d+) T/$1 $1/;
s/(-?\d+) U/$1 $1 $1/;
Это надо вставить после строкиИСН писал(а):Вот, вот. Вот этот комитет "сугубо надо вешать на вонючих верёвках". Ну да это так, в сторону.
Да, верно, там преобразование DIF. И потом сжатие DUP (в форматах графических файлов аналогичный подход называется RLE, и был вытеснен более прогрессивными форматами ещё в конце 80-х; но там он хоть имел смысл, а здесь изначально не имеет). Да, я тупо наплевал на дубликаты; это приводит к тому, что символ двукратного дублирования остаётся как есть (буквой), а при сворачивании невозбранно кастится в целое число (в 0), и немножко сбивает все дальнейшие ординаты. Трёхкратные и более дубликаты (в этом файле, кажется, единственный случай был) приводят к выпадению точек.
Не, ну если так-то поразмыслить, то ведь можно и учесть. После строки 18 вставьте:и другие последующие буквы, по вкусу.Код: Выделить всё
s/(-?\d+) T/$1 $1/; s/(-?\d+) U/$1 $1 $1/;
Код: Выделить всё
tr/\@ABCDEFGHI\%JKLMNOPQR/01234567890123456789/;
Не совсем понял насчет случая однократного дублирования. Вот такая строчка не пойдет?
Код: Выделить всё
s/(-?\d+) S/$1/;Да, это после строки tr/-что-то там.
Касательно дублирования.
Однократное дублирование - это, as to me, оксюморон.
Двукратное кодируется так: будет А трёхкратное: будет
(Здесь мне видится некое противоречие со стандартом, но я за главный авторитет считал имеющийся живой файл - теория, you know, суха, а древо жизни, собака такая, цветёт и пахнет по-всякому.)
В моём первом варианте буквы оставались как есть. Потом, при сворачивании ряда разностей в ряд значений, они интерпретировались как 0. Поэтому двукратное дублирование приводило к некоторой ошибке в значении (0 вместо +1 в данном примере), которая распространялась вперёд до конца. А трёх- и более кратное приводило к выпадению точек, то есть да, к сдвигу всего спектра влево.
Теперь же я предлагаю исправление: код, который заменяет последовательности (число T) на (число число), (число U) - на (число число число), и т.д.
Касательно дублирования.
Однократное дублирование - это, as to me, оксюморон.
Двукратное кодируется так:
Код: Выделить всё
+1 +1 -2 +3Код: Выделить всё
+1 T -2 +3Код: Выделить всё
+1 +1 +1 -2 +3Код: Выделить всё
+1 U -2 +3В моём первом варианте буквы оставались как есть. Потом, при сворачивании ряда разностей в ряд значений, они интерпретировались как 0. Поэтому двукратное дублирование приводило к некоторой ошибке в значении (0 вместо +1 в данном примере), которая распространялась вперёд до конца. А трёх- и более кратное приводило к выпадению точек, то есть да, к сдвигу всего спектра влево.
Теперь же я предлагаю исправление: код, который заменяет последовательности (число T) на (число число), (число U) - на (число число число), и т.д.
Тут может быть вопрос в определенииИСН писал(а):Касательно дублирования.
Однократное дублирование - это, as to me, оксюморон.
Теперь же я предлагаю исправление: код, который заменяет последовательности (число T) на (число число), (число U) - на (число число число), и т.д.
Интерпретировать "однократное дублирование" можно так: число, которое повторяется один раз. Т.е. имеем: (число S) это (число число), (число T) это (число число число) и т.д. Вобщем, логику учета дубликатов, я понял, сам попробую со скриптом пограться.
Еще, раз огромное Вам спасибо!
http://homepages.paradise.net.nz/dkw/NMRConvert12.zip
Макрос для Экселя. Но ИК-спектры не хочет преобразовывать
Макрос для Экселя. Но ИК-спектры не хочет преобразовывать
marat писал(а):http://homepages.paradise.net.nz/dkw/NMRConvert12.zip
Макрос для Экселя. Но ИК-спектры не хочет преобразовывать
Код: Выделить всё
NMRConvert12Как работает скрипт посмотреть нельзя, за исходник авторы программы хотят убитых енотов:
The Excel source code for NMR Converter is available at a cost of $100 (U.S.).
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 29 гостей