Как добавить имя .sdf файла к содержащимся в нём веществам?

Вопросы, связанные с химией вообще. Вы можете задать здесь свой вопрос, и мы постараемся на него ответить.
General chemical questions go here
Аватара пользователя
chemist
Сообщения: 10369
Зарегистрирован: Пн июл 26, 2004 2:14 am

Сообщение chemist » Пт фев 08, 2008 4:59 pm

Насколько я понимаю, этот скрипт должен добавить столько строк в SDF-файл с названием этого файла, сколько записей он содержит, а не только одну в начале файла.
I D E A = A u

Аватара пользователя
amge
Сообщения: 2050
Зарегистрирован: Вт июл 31, 2007 11:42 am

Сообщение amge » Пт фев 08, 2008 5:10 pm

ИСН писал(а):Вот хрен там.
То есть я хочу сказать - у меня, например, ни разу не так. Передаёт сырым как есть.
Да. Не знал такого. Но более близким аналогом моему скрипту будет код

Код: Выделить всё

print($ARGV) and close ARGV while <>
По идее, должен напечатать имена файлов.

Аватара пользователя
palek
Сообщения: 351
Зарегистрирован: Пн апр 03, 2006 11:14 am

Сообщение palek » Пт фев 08, 2008 11:57 pm

Я пробовал скрипт на 3-х файлах. Под Виндой - результаты я уже описывал. Под Линуксом - всё заработало для варианта *.sdf. Но потом у нас пропало электричество, так что на этом эксперименты закончились.
Скрипт действительно должен добавлять имя файла к каждому соединению в файле.

Аватара пользователя
amge
Сообщения: 2050
Зарегистрирован: Вт июл 31, 2007 11:42 am

Сообщение amge » Сб фев 09, 2008 1:10 pm

chemist писал(а):Насколько я понимаю, этот скрипт должен добавить столько строк в SDF-файл с названием этого файла, сколько записей он содержит, а не только одну в начале файла.
Задумывалось, чтобы скрипт добавлял в конец записей для каждого сединения в sdf-файле, перед терминатором $$$$, поле с именем файла. Тщательно я не проверял, но, вроде, так и получается.

ИСН, Вы были совершенно правы насчет cmd. Почитал в интернете, cmd действительно сам не раскрывает wildcards, а предоставляет делать это приложениям. Утешает меня лишь то, что заблуждался, оказывается, не только я.
palek писал(а):Под Виндой - результаты я уже описывал. Под Линуксом - всё заработало для варианта *.sdf.
Переделал скрипт (новый вариант - в обменнике), может, теперь и под виндой будет работать.

Вообще, хочу сказать, что SDF - очень приятный формат, простой и хорошо документированный. С ним легко делать многие вещи.

Что то не получается положить файл в обменник поэтому выложу сюда

Код: Выделить всё

#!perl

die "Usage: $0 *.sdf > all.sdf\n" unless @ARGV;

foreach $file (<@ARGV>) {
  open F, '<', $file or warn("Can't open $file: $!\n"), next;
  while (<F>) {
    # Извлекаем из Data Header номер без скобок
    # Если этот номер не нужен, то закомм. след. строку
    $n = $1 if /^>/ && /\s(\d+)(?:\s|$)/; 
    
    # Закомм. след. строку, чтобы не выбрасывать старые поля <FILENAME>
    next if /^>[^<]*<FILENAME>/ .. /^$/;
    
    # Раскомм. след. строку, чтобы записывать имя файла без расширения
    #$file =~ s/\.[^.]+$//; 
    
    # Перед $$$$ помещаем строки поля для <FILENAME>
    s/^(\${4})/> $n <FILENAME>\n$file\n\n$1/;
    
    # Печатаем
    print;
  }
  close F;
}

VTur
Сообщения: 7357
Зарегистрирован: Пт авг 31, 2007 1:36 pm

Сообщение VTur » Вс фев 10, 2008 12:18 am

amge писал(а): Вы были совершенно правы насчет cmd. Почитал в интернете, cmd действительно сам не раскрывает wildcards, а предоставляет делать это приложениям.
Это файл, запускающий другой файл из коммандной строки.

Аватара пользователя
ИСН
Робин Гуд
Сообщения: 8535
Зарегистрирован: Пт окт 10, 2003 5:32 pm
Контактная информация:

Сообщение ИСН » Вс фев 10, 2008 9:07 pm

Афигенно общехимическая тема получилась, короче говоря :lol: :lol:

Аватара пользователя
palek
Сообщения: 351
Зарегистрирован: Пн апр 03, 2006 11:14 am

Сообщение palek » Пн фев 11, 2008 12:21 am

Можно завести раздел по околохимическим компьютерным программам и обмениваться в нём практическим опытом работы в общепринятом для большинства химиков софте (ISIS, ChemDraw и т.д. )

Аватара пользователя
palek
Сообщения: 351
Зарегистрирован: Пн апр 03, 2006 11:14 am

Сообщение palek » Пт фев 22, 2008 7:01 pm

Появилась возможность и я вновь вернулся к этой проблеме.
К сожалению, последний вариант скрипта не заработал в cmd ни для *.sdf ни для отдельно взятого test.sdf файла - выдает сообщение об ошибке в строке 5. Ну, а под Линуксом всё отработало с приемлемым результатом:
Было

> <ID> (ID0001)
ID0001

$$$$

стало

> <ID> (ID0001)
ID0001

> <FILENAME>
test0001.sdf

$$$$

Что, в общем, приемлемо, хотя, по аналогии с другими полями, надо бы добавить ID и после поля <FILENAME>:

> <FILENAME> (ID0001)
test0001.sdf

$$$$

Аватара пользователя
amge
Сообщения: 2050
Зарегистрирован: Вт июл 31, 2007 11:42 am

Сообщение amge » Сб фев 23, 2008 11:51 am

palek писал(а):последний вариант скрипта не заработал в cmd
Не знаю, в чем дело. У меня работает. Если хотите, можно по этому поводу пообщаться в аське (мой UIN 246573616), а то, как совершенно справедливо было замечено выше, здесь это будет не в тему.
palek писал(а):надо бы добавить ID и после поля <FILENAME>
Это - легко. Просто заменить 10-ю и 19-ю строки соответственно на
$n = $1 if /^>/ && /\s(\(\w+\))(?:\s|$)/;
s/^(\${4})/> <FILENAME> $n\n$file\n\n$1/;

Ответить

Вернуться в «общехимические вопросы / general chemical issues»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 21 гость