Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > как разобрать данные из текстового файла


Автор: denis1706 8.12.2009, 13:07
подскажите плиз как разобрать текстовый фаил 
((//090111:
(1011):0:0::::
(1012):1894,216:1894,216::::
(1013):0:0::::
(1015):1276,574:1276,574::::
(1021):0:0::::
(1022):1814,871:1814,871::::
(1023):0:0::::
(1025):1517,937:1517,937::::
(1031):,002:,002::::
(1032):961,424:961,424::::
(1033):0:0::::
(1035):627,125:627,125::::
(1041):,007:,007::::
(1042):1660,044:1660,044::::
(1043):0:0::::
(1045):801,8:801,8::::
(1051):0:0::::
(1052):1425,055:1425,055::::
(1053):0:0::::
(1055):876,002:876,002::::
(1061):0:0::::
(1062):1792,627:1792,627::::
(1063):0:0::::
так чтобы он поместился в  двухмерный масив .не строкама и значениями?????

Автор: amg 8.12.2009, 13:28
Цитата(denis1706 @  8.12.2009,  13:07 Найти цитируемый пост)
подскажите плиз как разобрать текстовый фаил 
так чтобы он поместился в  двухмерный масив .не строкама и значениями?????
Непонятно, что нужно сделать. Объясните, пожалуйста, еще раз. 

Автор: ginnie 8.12.2009, 13:33
Так не подойдет?
Код

#!/usr/bin/perl

use strict;
use warnings;

use Text::CSV;

my $csv = Text::CSV->new ( { sep_char => ':' } ) or die "Cannot use CSV: ".Text::CSV->error_diag();

open my $fh, 'source.csv' or die "test.csv: $!";
my @rows;
while (my $row = $csv->getline($fh)) {
    push @rows, $row;
}
$csv->eof or $csv->error_diag();
close $fh;

Автор: denis1706 8.12.2009, 14:23
мне нужно взять этти данные неввиде строк. а ввиде чисел.и значениями втянуть в БД!!!!
use strict;
use warnings;

use Text::CSV;
а эти котструкции в каких библиотеках????

Добавлено через 4 минуты и 15 секунд
а если можна поставь плиз комены к скрипту
Цитата
  
#!/usr/bin/perl

use strict;
use warnings;

use Text::CSV;

my $csv = Text::CSV->new ( { sep_char => ':' } ) or die "Cannot use CSV: ".Text::CSV->error_diag();

open my $fh, 'source.csv' or die "test.csv: $!";
my @rows;
while (my $row = $csv->getline($fh)) {
    push @rows, $row;
}
$csv->eof or $csv->error_diag();
close $fh;


Автор: denis1706 8.12.2009, 14:54
привести в массиве к виду


дата                      №обьекта                            значение 1                значение 2
 
090111                  1011                                           0                              0
  
090111                   1012                                       1894,216                   1894,216




подскажите как привести к этому????а потом мне надо вызвать процедурк в БД и передать её аргумены в цикле.аргумент 09011 . аргумент2 1011.аргумент3 0. аргумент4 0.........!!!))))))

Автор: amg 8.12.2009, 15:36
О! Теперь понятно стало.
Код
open F, '<', "file1.txt" or die "Can't open : $!\n";
my @array;
my $date = '';
while (<F>) {
  chomp;
  if (m/^\(\(\/\/(\d+):/) {
    $date = $1; 
    next;
  }
  s/^\((\d+)\):/$1:/ or next;
  push @array, [$date, split /:/];
}
close F;

foreach (@array) {
  print "@$_\n";
}

Автор: denis1706 8.12.2009, 15:56
amg, плиз поставь коментарии к коду !!!а то ход скрипта немогу проследить!!!

Автор: denis1706 8.12.2009, 16:27
 amg,подскажи плиз как организовати цикл по массису чтобы выбирать из массива от  $array[0][0]
 до $array[0][3] c передачей оргументов в процедуру в ORACLE 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)