Просто используйте
fileLabel.setPreferredSize(new Dimension(100, 40));
Вместо
fileLabel.setMaximumSize(new Dimension(100, 40));
этот установщик сообщает, какой размер должен использоваться для этого компонента, когда он помещен в контейнер с менеджером макета
Острота является большой, если Вы не пишете больше Perl для обработки результата.
В более общем плане, хотя, в контексте большей программы Perl, Вы или записали бы пользовательское регулярное выражение, например:
if($line =~ m/(\S+)\s+(\S+)/) {
$ip = $1;
$hostname = $2;
}
... или Вы использовали бы оператор разделения.
my @arr = split(/ /, $line);
$ip = $arr[0];
$hostname = $arr[1];
Так или иначе добавьте логику для проверки на недопустимый вход.
Простая острота
perl -nae 'print "$F[0] $F[1]\n";'
можно изменить разделитель с -F
David Nehme сказал:
perl -nae 'print "$F[0] $F[1}\n";
который использует -a
переключатель. Я должен был искать тот:
-a turns on autosplit mode when used with a -n or -p. An implicit split
command to the @F array is done as the first thing inside the implicit
while loop produced by the -n or -p.
Вы изучаете что-то каждый день.-n заставляет каждую строку быть переданной
LINE:
while (<>) {
... # your program goes here
}
И наконец -e
способ непосредственно ввести одну строку программы. У Вас могут быть больше, чем -e
. Большая часть из этого была разрывом perlrun(1)
страница справочника.
Вот общее решение (если мы ступаем далеко от игры в гольф кода немного).
#!/usr/bin/perl -n
chop; # strip newline (in case next line doesn't strip it)
s/#.*//; # strip comments
next unless /\S/; # don't process line if it has nothing (left)
@fields = (split)[0,1]; # split line, and get wanted fields
print join(' ', @fields), "\n";
Обычно split
разделения пробелом. Если это не то, что Вы хотите (например, анализируя /etc/passwd
), можно передать разделитель как regex:
@fields = (split /:/)[0,2,4..6];
Конечно, при парсинге разграниченных двоеточием файлов возможности также хороши, что такие файлы не имеют комментариев, и Вы не должны разделять их.
Давайте превратим это в гольф кода! На основе превосходного ответа David, здесь является моим:
perl -ane 'print "@F[0,1]\n";'
Править: Реальное представление гольфа больше походило бы на это (бритье пяти штрихов):
perl -ape '$_="@F[0,1]
"'
но это менее читаемо в целях этого вопроса.:-P
Начиная с луча, который спрашивают, я думал, что перепишу свою целую программу, не используя неявность Perl (кроме использования <ARGV>
; это трудно выписать вручную). Это, вероятно, сделает людей Python более счастливыми (фигурные скобки, несмотря на это, :-P):
while (my $line = <ARGV>) {
chop $line;
$line =~ s/#.*//;
next unless $line =~ /\S/;
@fields = (split ' ', $line)[0,1];
print join(' ', @fields), "\n";
}
Есть ли что-нибудь, что я пропустил? Надо надеяться, нет. ARGV
дескриптор файла является особенным. Это заставляет каждый именованный файл на командной строке быть считанным, если ни один не указан, в этом случае это читает стандартный вход.
Править: О, я забыл. split ' '
является волшебным также, в отличие от этого split / /
. Последний просто соответствует пространству. Бывшие соответствия любое количество любого пробела. Это волшебное поведение используется по умолчанию, если никакой шаблон не указан для split
. (Некоторые сказали бы, но что относительно /\s+/
? ' '
и /\s+/
подобны, за исключением того, как пробел в начале строки рассматривают. Так ' '
действительно является волшебным.)
Мораль истории, Perl является большим, если Вам нравится большое волшебное поведение. Если у Вас нет панели его, используйте Python.:-P