Я только недавно задал здесь вопрос о чтении из файла и разбиении каждой строки, которая может быть найдена here.Ввод первой строки без пробела
Теперь у меня есть другой вопрос. Как сделать ввод чтения прочитанным, пока не будет найден символ пробела/табуляции/пробела?
Вот код:
#!/usr/bin/perl
open (ReadFrom, 'data.txt');
open (WriteTo, '>>data2.txt');
while (<ReadFrom>) {
chomp;
($hop, $skipme, $ip, $time1) = split(/ /);
print WriteTo "Hop: $hop\n";
print WriteTo "IP: $ip\n";
print WriteTo "Time: $time1\n";
}
close (ReadFrom);
exit;
Вот входной файл, например:
Как вы можете заметить, между номерами 1 и 9, есть пробел перед номером, это, по-видимому, считается расщеплением, и эти числа используются как значения skipme, а не значения hop. Остальные (10+) работают нормально, поскольку перед номером нет места. То, что я собираюсь выяснить, - это игнорировать каждый символ пробела, пока не найдет символ без пробелов. И тогда начнется раскалывание или что-то еще.
Это выход я с этим текущим кодом:
Hop: traceroute
IP: www.totalnet.com.ar
Time: (200.123.156.209),
Hop:
IP:
Time: www.undisclosed.com
Hop:
IP:
Time: www.undisclosed.com
Hop:
IP:
Time: www.undisclosed.com
Hop:
IP:
Time: www.undisclosed.com
Hop:
IP:
Time: www.undisclosed.com
Hop:
IP:
Time: ae1x19.wsu5.mich.net
Hop:
IP:
Time: xe-4-1-1x76.eq-chi2.mich.net
Hop:
IP:
Time: ae-4.584.chic0.tr-cps.internet2.edu
Hop:
IP:
Time: xe-2-2-0.0.ny0.tr-cps.internet2.edu
Hop: 10
IP: 64.57.20.74
Time: (64.57.20.74)
Hop: 11
IP: NSS-S-A.TenGigabitEthernet8-3.ar1.EZE1.gblx.net
Time: (64.208.7.70)
Hop: 12
IP: customer-static-210-110-65.iplannetworks.net
Time: (190.210.110.65)
Hop: 13
IP: customer-static-210-110-54.iplannetworks.net
Time: (190.210.110.54)
Hop: 14
IP: customer-static-210-110-141.iplannetworks.net
Time: (190.210.110.141)
Hop: 15
IP: 190.210.125.85
Time: (190.210.125.85)
Hop: 16
IP: mx.radioelectron.com.ar
Time: (200.123.156.209)
Вы получаете это поведение, потому что вы разделяете регулярное выражение с пространством '/ /', а не буквальное пространство '' '', которое почти похоже на '/ \ s + /', за исключением того, что оно разбивает ведущие пробелы. – TLP
Кроме того, такой ввод не всегда подходит для синтаксического анализа. С другой стороны, часто работает модуль, который выполняет эту работу. Я нашел это, например: ['Net :: Traceroute'] (http://search.cpan.org/perldoc?Net%3A%3ATraceroute). – TLP
Это мелочи, которые мне нужно будет узнать и узнать больше, когда я получу время. Однако на данный момент я спешу с чем-то и продолжаю приходить сюда. Я очень ценю вашу помощь TLP, она работает. Надеюсь, это последний из вас, кто беспокоит вас, ребята, с ультра-простыми вопросами (я совершенно не знаком с perl, но очень опытен с программированием). И да, я видел, что есть модуль, но мы увидим, что это может быть лучшим вариантом, но мы уже собрали сотни результатов traceroute и ping, мне просто нужен скрипт, чтобы получить индивидуальный анализ среди всех. – Evan