URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6572
[ Назад ]

Исходное сообщение
"преоразовать файл"

Отправлено Vlad , 30-Июн-07 21:27 
Помогите пожалуйста, с такой задачкой.
Имеется файл вида:

a cappella,abbandono,accrescendo,affettuoso,agilmente
a la mode,advanced,avant-garde,chic,contemporary,dashing
a priori,a fortiori,a posteriori,analytic,back,backward

Нужен скрипт (или пнуть куда копать) отсекающий все слова после третьего в каждой строке, включая запятую.


Содержание

Сообщения в этом обсуждении
"преоразовать файл"
Отправлено allez , 30-Июн-07 21:52 
>Помогите пожалуйста, с такой задачкой.
>Имеется файл вида:
>
>a cappella,abbandono,accrescendo,affettuoso,agilmente
>a la mode,advanced,avant-garde,chic,contemporary,dashing
>a priori,a fortiori,a posteriori,analytic,back,backward
>
>Нужен скрипт (или пнуть куда копать) отсекающий все слова после третьего в
>каждой строке, включая запятую.


Вот вам быстренький и грязненький способ :-)

#!/usr/bin/perl -w

use strict;

open (F, $ARGV[0]); # имя файла передаем скрипту как аргумент

my @array;  # объявляем массив

# Начинаем считывать построчно содержимое файла
while (<F>) {
  @array = split(",",$_); # записываем элементы строки в массив, используя запятые как разделители
  print qq($_); # выводим на печать исходную строку
  print qq($array[0] $array[1] $array[2]\n); # а теперь печатаем только три первых элемента массива
}
close F; # закрываем файл


А вот результат работы этого скрипта:
> ./words.pl words.txt
a cappella,abbandono,accrescendo,affettuoso,agilmente
a cappella abbandono accrescendo
a la mode,advanced,avant-garde,chic,contemporary,dashing
a la mode advanced avant-garde
a priori,a fortiori,a posteriori,analytic,back,backward
a priori a fortiori a posteriori

"преоразовать файл"
Отправлено Vlad , 01-Июл-07 00:12 
Спасибо!


"преоразовать файл"
Отправлено jd , 01-Июл-07 11:01 
Кошмар :) Может лучше что-нибудь вроде этого (тоже, впрочем, несовершенного)?

#!/usr/bin/perl -w

while(<>) {
  $_ =~ s/^([^,]*),([^,]*),([^,]*).*$/$1 $2 $3/;
  print;
}


"преоразовать файл"
Отправлено jd , 01-Июл-07 11:03 
Аналогичное регулярное выражение можно использовать и с sed... Если это единственное, что необходимо проделать с текстом.

"преоразовать файл"
Отправлено andy , 02-Июл-07 07:33 
еще можно пользовать параметр перла F
нечто вроде

#!/usr/bin/perl -naF,

BEGIN {
  # разделитель выходных записей
  $\ = "\n";
  # разделитель полей вывода
  $, = ",";
}

print @F[1..3];


"преоразовать файл"
Отправлено madskull , 04-Июл-07 10:21 
Божежмой!
А не проще ли сделать
cut -d, -f -3
?!!

если не нужны запятые, то добавить
tr ',' ' '


"преоразовать файл"
Отправлено allez , 04-Июл-07 11:23 
>Божежмой!
>А не проще ли сделать
> cut -d, -f -3
>?!!
>
>если не нужны запятые, то добавить
> tr ',' ' '

Дык товарищ Vlad вроде решение на Perl ищет, иначе зачем ему в "перловый" подраздел
писать? Хотя, конечно, он мог и просто промахнуться, но это лучше уже у него спросить...


"преоразовать файл"
Отправлено madskull , 04-Июл-07 12:06 
>>Божежмой!
>>А не проще ли сделать
>> cut -d, -f -3
>>?!!
>>
>>если не нужны запятые, то добавить
>> tr ',' ' '
>
>Дык товарищ Vlad вроде решение на Perl ищет, иначе зачем ему в
>"перловый" подраздел
>писать? Хотя, конечно, он мог и просто промахнуться, но это лучше уже
>у него спросить...

Ээ... Тогда да, погорячился я. Сорри.
О том что это про перл, видно только(?) из списка тем, а я из рассылки захожу.


"преоразовать файл"
Отправлено allez , 05-Июл-07 12:00 
>Ээ... Тогда да, погорячился я. Сорри.
>О том что это про перл, видно только(?) из списка тем, а
>я из рассылки захожу.

Хм, действительно, находясь в теме, невозможно установить, к какому подразделу она
относится. Так что теперь моя очередь говорить "тоды ой". :-)