Я работаю над программой, и у меня есть пара вопросов, надеюсь, вы можете помочь:
Сначала мне нужно получить доступ к файлу и получить определенную информацию в соответствии с индексом, полученным из предыдущегошаг, на котором индексы для поиска находятся и хранятся в хэше.
Я искал способ включить все элементы массива в регулярное выражение, которые я могу использовать при поиске файлов, но у меня нетНе смог заставить его работать.В конце концов я нашел способ, который работает:
my @atoms = ();
my $natoms=0;
foreach my $atomi (keys %{$atome}){
push (@atoms,$atomi);
$natoms++;
}
@atoms = sort {$b cmp $a} @atoms;
и затем я использую его как регулярное выражение следующим образом:
while (<IN_LIG>){
if (!$natoms) {last;}
......
if ($_ =~ m/^\s*$atoms[$natoms-1]\s+/){
$natoms--;
.....
}
Есть ли способ создать выражение регулярного выражения, которое бывключить все ключи хеша?Они числовые и должны быть отсортированы.Ключи ссылаются на индекс строки в IN_LIG, содержимое которого выглядит примерно так:
8 C5 9.9153 2.3814 -8.6988 C.ar 1 MLK -0.1500
Ключ находится в столбце 0 (8).Я добавил ^ и \ s +, чтобы убедиться, что он ссылается только на первый столбец.
Моя вторая проблема заключается в том, что иногда входные файлы не всегда идентичны, и они содержат пробелы перед индексом, поэтому при созданиимассив из $ _ Я получаю column0 = "" вместо column0 = 8
Я не понимаю, почему этот «пустой столбец» не удаляется в команде split, и у меня возникли некоторые проблемы, чтобы удалить его,Вот что я сделал:
@info = split (/[\s]+/,$_);
if ($info[0] eq " ") {splice (@info, 0,1);} # also tried $info[0] =~ m/\s+/
, и когда я печатаю массив @info, я получаю это:
Array:
Array: 8
Array: C5
Array: 9.9153
Array: 2.3814
.....
Как мне избавиться от пустого столбца?
Большое спасибо за вашу помощь, Мерче