Привет всем ещё раз, собственно сам сабж: есть база такого плана: Code: Морской, ул. Красноармейская, 30 кв.м, среднее состояние, развитая инфраструктура района, 3.250.000 руб. Тел. 8-000-100-10-10. Морской, ул. Красноармейская, 5/5, 32 кв.м, перепланирована, встроенная кухня, отличный ремонт, 3.100.000 руб. 8-90-000-0-000, Сергей. Нужен скрипт или программа которая способна выполнить экспорт и распределение текста по колонкам примерно для такого вида колонки (Exel колонки): Code: Район Улица Этаж Этажность Площадь Жилая(s) Кухня(s) Цена Владелец Контакт Добавлен Источник К примеру текст из файла должен заполнится в колонки, к примеру имеем текст вида: Заречный, ул. Гастелло, 1/5, 27 кв.м, коммуникации центральные, мебель, бытовая техника, состояние среднее, хороший район, рядом остановка, 2.900.000 руб. Возможна скидка. Тел. 8-998-999-89-89. Code: Заречный идёт в колонку Район ул. Гастеллоя в колонку Улица 1/5 в колонки Этаж и Этажность 27 кв.м в колонку Площадь 2.900.000 руб. в колонку Цена Тел. 8-998-999-89-89 в колонку Контакт 7я колонка это весь текст (Заречный, ул. Гастелло, 1/5, 27 кв.м, коммуникации центральные, мебель, бытовая техника, состояние среднее, хороший район, рядом остановка, 2.900.000 руб. Возможна скидка. Тел. 8-998-999-89-89.) Тоесть $a обрабатывается текст с начала строки до первой запятой и переносится в 1ю колонку $b обрабатывает текст после "ул." и переносится весь тоже до первой запятой $c ищет текст формата число/число и переносит оба числа в разные колонки (пример выше) $d ищет текст (цифры с плавающей запятой) до кв.м и переносит их в колонку $e Добавляет сумму до руб. и переносит их в колонку с ценой $f обрабатывает цифры после Тел. и переносит их в соответствующую колонку $g копирует весь текст в 7ю колонку (весь текст объявления без изменений) Очень желательно что бы скрипт был на Perle (знаю что есть функция ParseExce) ну или уж на крайней случай если есть софтинка подобного рода для такого преобразования текста, если кому не лень выложите примерчик для обработки работающий ибо я не силёт в перле, да и вообще в языках программирования, буду просто безумно благодарен вам, заранее большое спасибо!
warlock000 сделайте импорт из txt файла с разделителем ", " Далее возьмите столбец который нужно еще разделить, киньте в текстовик и еще раз импортируйте с нужным разделителем или наоборот объедините разделы которые нужно. Немного ручной работы и всё готово. Скрипты писать - это оплачиваемые услуги, тем более такие, как вы запрашивайте. Gifts +1
Code: #!/usr/bin/perl6 grammar Объявление { rule TOP { :i ^ [ | <район> | ул. <улица> | <этаж> '/' <этажей> | <площадь> | <цена> | <-[,]>+ ] ** ',' .+? 'тел.'? <контакт> } token район { :i [ | Заречный | Морской | Центральный ] # и т. д. } token улица { <-[,]>+ } token этаж { \d+ } token этажей { \d+ } token площадь { :i \d+ <.ws>? 'кв.' <.ws>? 'м' } token цена { :i [\d+] ** '.' <.ws>? 'руб' } token контакт { [\d+] ** '-' } } .say for Объявление.parse( 'Заречный, ул. Гастелло, 1/5, 27 кв.м, коммуникации центральные, мебель, бытовая техника, состояние среднее, хороший район, рядом остановка, 2.900.000 руб. Возможна скидка. Тел. 8-998-999-89-89. '.trim).pairs; Perl - хороший язык Code: sh$ perl6 -v This is Rakudo Perl 6, version 2011.01 built on parrot 3.0.0
Огромное спасибо за скрипт, ты очень выручил Нарыл скриптик для экспорта в эксель: Code: use strict; use Cwd; use Win32::OLE; my $out_dir = cwd().'/'; $out_dir =~ s/\//\\/g; my ($xls_file, $mim_file, $out_file, $line, $cell_no, $value); my ($workbook, $woksheet, $ex); my $help = "ЗАПУСК: txt2xls <файл-шаблон XLS> <файл данных> <результ.XLS>\n\n". "Файл отчета должен иметь структуру:\n". " A1=значение\n". "где A1-ячейка, 'значение' - значение этой ячейки.\n". "Пример exel.pl test.xls test.txt result.xls.\n"; my %cells = (); ($xls_file, $mim_file, $out_file) = @ARGV; if (!(-f $xls_file) || !(-f $mim_file)) { print "ОШИБКА: Файл(ы) не найдены\n"; print $help; exit 0; } open(IN,$mim_file) || die $!; while(<IN>) { if($_ !~ /^[\#|\;]/) { chomp; ($cell_no, $value) = split(/=/,$_); $cell_no =~ s/\s//g; $value =~ s/^\s//g; $cells{$cell_no} = $value; } } close IN; # Открываем Excel (выдрано из доки к Win32::OLE) eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')}; die "Excel not installed" if $@; unless (defined $ex) { $ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;}) or die "Oops, cannot start Excel"; } $workbook = $ex->Workbooks->Open($out_dir.$xls_file); my $worksheet = $workbook->Worksheets(1); foreach $cell_no (sort keys %cells) { $worksheet->Range($cell_no)->{Value} = $cells{$cell_no}; } $workbook->SaveAs($out_dir.$out_file); undef $workbook; $ex->Quit; undef $ex; Запуск: имя_шаблона_xls имя_файла_данных имя результир.файла_xls (exel.pl exel.xls data.txt out.xls) data.txt должен иметь формат примерно такой: Code: C3=Заречный D3=ул. Гастелло E3=1 F3=5 G3=27 H3= I3= J3=2.900.000 K3=Собственник L3=8-998-999-89-89. M3=28.07.2011 N3=Объявление O3= Заречный, ул. Гастелло, 1/5, 27 кв.м, коммуникации центральные, мебель, бытовая техника, состояние среднее, хороший район, рядом остановка, 2.900.000 руб. Возможна скидка. Тел. 8-998-999-89-89. P.S. Данные выгружаются в текстовый файл следующим образом: Code: rajon Morskoy ylica Gastello etaj 1 etajey 5 plowad 27 kv.m price 2.900.000 rub kontact 8-998-999-89-89 rajon Centralniy ylica Gastello etaj 1 etajey 5 plowad 27 kv.m price 2.900.000 rub kontact 8-998-999-89-89 rajon Zare4 ylica Gastello etaj 1 etajey 5 plowad 27 kv.m price 2.900.000 rub kontact 8-998-999-89-89 Если выгружать в exel : (А1-А21) (B1-B21) Code: rajon Morskoy ylica Gastello etaj 1 etajey 5 plowad 27 kv.m price 2.900.000 rub kontact 8-998-999-89-89 rajon Centralniy ylica Gastello etaj 1 etajey 5 plowad 27 kv.m price 2.900.000 rub kontact 8-998-999-89-89 rajon Zare4 ylica Gastello etaj 1 etajey 5 plowad 27 kv.m price 2.900.000 rub kontact 8-998-999-89-89 Можно ли сделать так что бы выходные данные приобрели вид: Code: C3=Заречный D3=ул. Гастелло E3=1 F3=5 G3=27 H3= I3= J3=2.900.000 K3=Собственник L3=8-998-999-89-89. M3=28.07.2011 N3=Объявление O3= Заречный, ул. Гастелло, 1/5, 27 кв.м, коммуникации центральные, мебель, бытовая техника, состояние среднее, хороший район, рядом остановка, 2.900.000 руб. Возможна скидка. Тел. 8-998-999-89-89. Или сразу добавлялись в заданные колонки?
Сабж решил сам, выучил регулярки в перл и написал скрипт обработчик З.Ы. Хочу выразить большую благодарность dpe_x и astrologer за помощь З.З.Ы. УВ можераторы, тему можно закрывать