Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PERL)Удаление пустых строк / 15 сообщений из 15, страница 1 из 1
16.06.2005, 16:33
    #33120053
fl00
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
Пишу парсер для текстового файла. Не получается удалить пустые строки в тексте. Нужно из таких столбцов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 2 )Markachcho   


 2 )Serra


 2 )Koellerer


and


[src] 1 )Dlougi


 1 )Nieminen


 1 )Berdyh

 

сделать такой
Код: plaintext
1.
2.
3.
Dlougi - Markachcho
Nieminen - Serra


Но так не получается из-за разного количества пустых строк...Как их удалить...
Чтоб столбцы стали такие
Код: plaintext
1.
2.
3.
4.
5.
 2 )Markachcho
 2 )Serra
 2 )Koellerer
 2 )Bogomolov
 2 )Falla
...
Рейтинг: 0 / 0
16.06.2005, 17:04
    #33120174
g613
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
...
Но так не получается из-за разного количества пустых строк...Как их удалить...

Код: plaintext
1.
next if /^\s*$/
при чтении списка

?
...
Рейтинг: 0 / 0
16.06.2005, 17:04
    #33120175
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
что Вам надо совершенно не понятно! откуда взялось Falla,... ?

должен получится первый вариант или второй?
...
Рейтинг: 0 / 0
16.06.2005, 20:43
    #33120536
Ksnk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
fl00Пишу парсер для текстового файла. Не получается удалить пустые строки в тексте. Нужно из таких столбцов
2)Markachcho

Ну, к примеру так:
Код: plaintext
1.
2.
$s=preg_replace("/(\n(\s*)\n)/","\n\n",$s); // если нужно удалить строки из пробелов
$s=preg_replace("/\n\n+/","\n",$s);  // слить несколько \n в один
...
Рейтинг: 0 / 0
16.06.2005, 22:27
    #33120614
nik2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
Ksnk
Ну, к примеру так:
Код: plaintext
1.
2.
$s=preg_replace("/(\n(\s*)\n)/","\n\n",$s); // если нужно удалить строки из пробелов
$s=preg_replace("/\n\n+/","\n",$s);  // слить несколько \n в один


PERL != PHP
...
Рейтинг: 0 / 0
17.06.2005, 11:03
    #33121223
Ksnk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
nik2 Ksnk
Ну, к примеру так:
Код: plaintext
1.
2.
$s=preg_replace("/(\n(\s*)\n)/","\n\n",$s); // если нужно удалить строки из пробелов
$s=preg_replace("/\n\n+/","\n",$s);  // слить несколько \n в один


PERL != PHP
Это о чем? Я привел вполне корректный код для PHP.
автор(PHP 3>= 3.0.9, PHP 4 , PHP 5)

preg_replace -- Выполняет поиск и замену по регулярному выражению
...
Рейтинг: 0 / 0
17.06.2005, 11:18
    #33121259
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
2Ksnk вопрос в обще-то был для Perl
...
Рейтинг: 0 / 0
17.06.2005, 11:35
    #33121305
fl00
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
Объясню поподробнее, а то вчера вечером голова не варила. Исходный файл прикреплен ниже. То что получилось и что надо сделать дальше поясню в следующем посте.

Вот что я сделал с исходным
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
$file_in = "/home/sa/ODDS/odds_in.txt";
$file_out = ">/home/sa/ODDS/odds_out.txt";

open FI, $file_in;
open FO, $file_out;


while(<FI>)
{
 s/^\s+//; 
 s/\s+$//;
 next if /^$/;  
 next if /^_/;
 $line = $_;
 ($data, $name, $P1, $P2, $tz, $to, $ot, $zt, $F1, $F2, $T, $B, $M) = split(/\s+/,$line);
  if($line=~/^\d+/)   
   {   
     print FO  " $line \n "  ;
   }
  
}
close FI;
close FO;
   
...
Рейтинг: 0 / 0
17.06.2005, 12:14
    #33121457
fl00
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
Забыл прикрепить файл. Прикрепил сдесь.

Мне нужно расположить эти данные в таком виде

Код: plaintext
 16 / 06 ; "B'orkman"; "Benneto";     1 . 45 ;    2 . 50 ;    2 . 10 ;   4 . 00 ;   5 . 20 ;   4 . 20 ;   - 3 . 0 ;  1 . 85 ;  + 3 . 0 ;  1 . 85 ;     23 . 0 ;   1 . 75 ;  1 . 95 

То есть подготовить их для размещения в mySQL.

Когда я начинаю работать с перем-й $name, я отделяю строки использую поле даты. Дальше присваиваю этим полям другие переменные и пытаюсь вывести их рядом. А они распологаются лесенкой...
Код: plaintext
1.
2.
3.
____
       _____
____
       ______   .
Как поставить их рядом?

Вот программа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
#!/usr/bin/perl

$file_in = "/home/sa/STAVKI/lineout.txt";
$file_out = ">/home/sa/Scripts/lineut.txt";

open FI, $file_in;
open FO, $file_in;

while(<FI>)
{
 s/^\s+//; 
 s/\s+$//;
 next if /^$/;
 $line = $_;
 ($data, $name, $P1, $P2, $tz, $to, $ot, $zt, $F1, $F2, $T, $B, $M) = split(/\s+/,$line);
 $fname = func();
 $sname = func1();
 print " $fname \t $sname \n";
  
}
close FI;
close FO;

sub func
{
if($data!~/\d+\:\d+/)
  {
   $firstname = $name;
  }  
}

sub func1
{
if($data=~/\d+\:\d+/)
  {
   $secondname = $name;
  }  
}
  
...
Рейтинг: 0 / 0
17.06.2005, 12:36
    #33121548
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
А почему бы тупо не заточить под это регексп?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
undef $/;
$line = <>;
while($line =~ m!(\d\d/\d\d)\s+ 1 \)(.+?)\s+(\d.+?)\n\s+(\d\d:\d\d)\s+ 2 \)(.+?)\n!gc){
        my $date = "$1 $4";
        my $name1 = $ 2 ;
        my $name2 = $ 5 ;
        my $data=$ 3 ;
        $data=~ s/[=>]/ /g;
        my @a=split(/\s+/, $data);
        print "'$date'; '$name1' ; '$name2' ; ", join " ; ", @a;
        print "\n";
}

P.S. lynx рулит :)
...
Рейтинг: 0 / 0
17.06.2005, 13:38
    #33121799
fl00
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
Спасибо, XM! То, что мне нужно )).
Но я не знаю как ему на вход указать файл... Подскажи, плиз.
И еще, join употребляется без скобок?
Код: plaintext
 join " ; ", @a;
...
Рейтинг: 0 / 0
17.06.2005, 13:55
    #33121858
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
fl00 wrote:
> Спасибо, XM! То, что мне нужно )).
> Но я не знаю как ему на вход указать файл... Подскажи, плиз.
Код: plaintext
1.
2.
3.
open FI, "<odds.txt" or die "Can't open!";
local $/=undef;
$line=<FI>;

> И еще, join употребляется без скобок?
>
> join " ; ", @a;
>
В perl много еще где можно вызывать функции без скобок :)
perldoc perlsub
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
17.06.2005, 13:57
    #33121867
g613
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
fl00Спасибо, XM! То, что мне нужно )).
Но я не знаю как ему на вход указать файл... Подскажи, плиз.


< $line = <>
> $line = <F1>

+ открыть его (F1) несколько выше, так как ты писал в предыдущем посте...


И еще, join употребляется без скобок?
Код: plaintext
 join " ; ", @a;


да
...
Рейтинг: 0 / 0
17.06.2005, 14:35
    #33121995
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
не забывай делать flock имя_дескриптора,2;
...
Рейтинг: 0 / 0
17.06.2005, 15:24
    #33122145
fl00
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL)Удаление пустых строк
Нет слов, одни слюни:)). Всё работает! Спасибо, парни.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PERL)Удаление пустых строк / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]