Xpoint
   [напомнить пароль]

Работа с файлами и строками

Метки: [без меток]
2009-06-05 01:38:37 [обр] Krigs[досье]
Здравствуйте!
Я студент, только познаю азы программирования на Perl. Так как он работает с текстом, решила облегчить себе работу с одним фалом, заодно и по практиковаться. Файл с расширением txt. Выглядит он так, например:
- пояснительный текст
port 80
- пояснительный текст
я не могу понять, как мне нужную строку достать из файла. возьмем пример как мне из текста достать
эту строчку?
я, наверное, немного путано объясняю. :)
помогите пожалуйста!
спустя 6 часов [обр] Евгений Седов aka KPbIC(38/176)[досье]
while (<>) { print if /^port \d+/ }
спустя 8 минут [обр] Алексей Севрюков(198/1280)[досье]
М Перенесено из форума "Программирование::Perl::Разное"
спустя 2 минуты [обр] Алексей Севрюков(198/1280)[досье]
М Евгений Седов aka KPbIC[досье] Мы в основах, здесь не приветствуются навороченные однострочники без комментариев. Более того Ваш код не решает поставленной задачи.
спустя 22 минуты [обр] Евгений Седов aka KPbIC(38/176)[досье]

Алексей Севрюков[досье]

Мы в основах

О, как!

спустя 11 минут [обр] Евгений Седов aka KPbIC(38/176)[досье]

Алексей Севрюков[досье]

Ваш код не решает поставленной задачи
eugenio@bedouin~/test:$ cat text.txt | perl student.pl

Или вы как-то иначе поняли задачу?

спустя 2 часа 41 минуту [обр] Алексей Севрюков(198/1280)[досье]

Евгений Седов aka KPbIC[досье] Еще раз - мы в основах. Тут надо все разжевывать. Если Вам лень этим заниматься, лучше вообще ничего не пишите. Все равно вряд ли автор сможет воспользоваться Вашим кодом и понять как он работает.

Тонкий такой намек:

Или вы как-то иначе поняли задачу?

Ой, а у меня не работает. Может потому что у меня Windows, а Ваш пример под *nix?

спустя 2 часа 27 минут [обр] Krigs[досье]
Я только начинаю изучать Perl, пожалуйста можно мне попроще, пускай код будет и громоздким, но зато я разберусь и пойму. Я написала меню, которая буде выдавать название строки. Все это в консоли делается. И я написала конец, который поможет мне изменить строку. Но для это мне нужно ее вывести из файла на экран (сначала записать в переменную, а потом вывести). Я посмотрела операторы split и join, но ни как не могу понять, как все соединить в код, что бы выводилось.
Пишу под Windows систему.
спустя 1 час 10 минут [обр] Алексей Севрюков(198/1280)[досье]

Krigs[досье] опишите задачу подробнее, что в исходных данных и что из них Вам необходимо получить. Ваша первоначальная задача решается следующим простым образом:

#!/usr/bin/perl

use strict;

open(FILE,'<','file.txt') or die "Не могу открыть файл. Ошибка: $!"; #открываем файл, режим < - чтение
while(<FILE>) # Читаем файл построчно
 {
  my $line=$_; # текущая прочитанная строка файла находится в "волшебной" переменной $_.

  if($line=~m#^port \d+#i) # сравниваем строку и ищем в ней слово port, пробел и последовательность цифр, без учета регистра (флаг i в регулярном выражении).
   {
    print "Найдено: $line\n"; # Выводим всю строку на экран
   }
 }
close(FILE) or die "Не могу закрыть файл. Ошибка: $!"; # закрываем файл

Решение KPbIC[досье] делает все то же самое, только файл оно получает на стандартный ввод скрипта, STDIN. А конструкция которой вызывается этот скрипт будет работать только в *nix системах. Т.е. Вам это решение не поможет.

P.S. Код я не проверял.

спустя 4 часа 1 минуту [обр] Krigs[досье]
Алексей Севрюков[досье]
Спасибо! Попробую, так вроде понятно, можно еще вопрос - d+#i - это цифры, а если у меня там еще слова будут написаны, например, строка такая DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs", соответственно ищем по DocumentRoot и изменяем все остальное.
Я пока с вашим кодом поработаю, может быть и сама пойму, но лучше подстраховаться.
Еще раз спасибо!
спустя 1 час 49 минут [обр] Алексей Севрюков(198/1280)[досье]

Krigs[досье] если такая строка, то:

$line=~m#DocumentRoot "[^"]*"#i;

Про регулярные выражения можно почитать тут: perldoc perlre или купить эту книгу.

Powered by POEM™ Engine Copyright © 2002-2005