powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PERL)Удаление пустых строк
15 сообщений из 15, страница 1 из 1
(PERL)Удаление пустых строк
    #33120053
fl00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу парсер для текстового файла. Не получается удалить пустые строки в тексте. Нужно из таких столбцов
Код: 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
(PERL)Удаление пустых строк
    #33120174
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Но так не получается из-за разного количества пустых строк...Как их удалить...

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

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

должен получится первый вариант или второй?
...
Рейтинг: 0 / 0
(PERL)Удаление пустых строк
    #33120536
Ksnk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
(PERL)Удаление пустых строк
    #33120614
nik2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
(PERL)Удаление пустых строк
    #33121223
Ksnk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
(PERL)Удаление пустых строк
    #33121259
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Ksnk вопрос в обще-то был для Perl
...
Рейтинг: 0 / 0
(PERL)Удаление пустых строк
    #33121305
fl00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясню поподробнее, а то вчера вечером голова не варила. Исходный файл прикреплен ниже. То что получилось и что надо сделать дальше поясню в следующем посте.

Вот что я сделал с исходным
Код: 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
(PERL)Удаление пустых строк
    #33121457
fl00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл прикрепить файл. Прикрепил сдесь.

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

Код: 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
(PERL)Удаление пустых строк
    #33121548
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему бы тупо не заточить под это регексп?
Код: 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
(PERL)Удаление пустых строк
    #33121799
fl00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, XM! То, что мне нужно )).
Но я не знаю как ему на вход указать файл... Подскажи, плиз.
И еще, join употребляется без скобок?
Код: plaintext
 join " ; ", @a;
...
Рейтинг: 0 / 0
(PERL)Удаление пустых строк
    #33121858
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
(PERL)Удаление пустых строк
    #33121867
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fl00Спасибо, XM! То, что мне нужно )).
Но я не знаю как ему на вход указать файл... Подскажи, плиз.


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

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


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


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


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