パーサーに関する質問。テーブルを区切るいくつかのセパレーターをキャッチする機会はありますか...paserスクリプトはすでにうまく実行されています。注-データをMySQLデータベースに保存したい。したがって、いくつかの区切り文字(コンマ、タブ、またはその他)があると便利です。タブ区切り値またはコンマ区切り値は、操作に便利な形式です...
(ここでは、次のサイトのデータ:http: //192.68.214.70/km/asps/schulsuche.asp?q=a&a=20 )
lfd。Nr。Schul-nummerSchulnameStraßePLZOrtTelefonFax Schulart Webseite 10401MädchenrealschuleMarienburg、Abenberg、derDiözeseEichstättMarienburg1 91183 Abenberg 09178/509210Realschulenmrs-marienburg.homepage.t-online.de26581VolksschuleAbenberg(Grund 2 91183 Abenberg 09178/215 09178/905060 Volksschulen home.t-online.de/home/vs-abenberg63074プライベートBerufsschulezursonderpäd。Förderung、FörderschwerpunktLernen、AbensbergRegensburgerStraße6093326 Abensberg09443/70919109443/709193Berufsschulenzursonderpädog。Förderungwww.berufsschule-abensberg.de
さて、私はそれらの行を少なくとも3つの列に分割する必要があります-最初のレコードを取ります。
名前:Volksschule Abenberg(Grundschule)通り:Güssübelstr。2郵便番号と町:91183 Abenbergファックスと電話:09178/215 09178/905060学校の種類:Volksschulenウェブサイト:home.t-online.de/home/vs-abenberg
またはさらに良い-私は郵便番号と町を2つの別々の列に分割しました!?質問:これは可能ですか?
ちなみに:最初のレコードを参照してください:(ここでは学校の名前のみを表示しています)
10401MädchenrealschuleMarienburg、Abenberg、63074プライベートBerufsschulezursonderpäd。Förderung、FörderschwerpunktLernen、Abensberg
それらは名前の中にいくつかのコンマを持っています。これにより、csv-fomateを作成するパーサーを作成することが難しくなりますか?
Perlでこれを行う方法についてのアイデア...可能であれば、それは素晴らしいことです!! この小さな問題に関するヒントのための多くの多くのthx-これに加えて、すべてが素晴らしくて魅力的です!
零
ところで-必要に応じて-私はコードを追加することができます。ここでは問題ありません。
#!/usr/bin/perl
use strict;
use warnings;
use HTML::TableExtract;
use LWP::Simple;
use Cwd;
use POSIX qw(strftime);
my $te = HTML::TableExtract->new;
my $total_records = 0;
my $suchbegriffe = "e";
my $treffer = 50;
my $range = 0;
my $url_to_process = "http://192.68.214.70/km/asps/schulsuche.asp?q=";
my $processdir = "processing";
my $counter = 50;
my $displaydate = "";
my $percent = 0;
&workDir();
chdir $processdir;
&processURL();
print "\nPress <enter> to continue\n";
<>;
$displaydate = strftime('%Y%m%d%H%M%S', localtime);
open OUTFILE, ">webdata_for_$suchbegriffe\_$displaydate.txt";
&processData();
close OUTFILE;
print "Finished processing $total_records records...\n";
print "Processed data saved to $ENV{HOME}/$processdir/webdata_for_$suchbegriffe\_$displaydate.txt\n";
unlink 'processing.html';
die "\n";
sub processURL() {
print "\nProcessing $url_to_process$suchbegriffe&a=$treffer&s=$range\n";
getstore("$url_to_process$suchbegriffe&a=$treffer&s=$range", 'tempfile.html') or die 'Unable to get page';
while( <tempfile.html> ) {
open( FH, "$_" ) or die;
while( <FH> ) {
if( $_ =~ /^.*?(Treffer <b>)(d+)( - )(d+)(</b> w+ w+ <b>)(d+).*/ ) {
$total_records = $6;
print "Total records to process is $total_records\n";
}
}
close FH;
}
unlink 'tempfile.html';
}
sub processData() {
while ( $range <= $total_records) {
getstore("$url_to_process$suchbegriffe&a=$treffer&s=$range", 'processing.html') or die 'Unable to get page';
$te->parse_file('processing.html');
my ($table) = $te->tables;
for my $row ( $table->rows ) {
cleanup(@$row);
print OUTFILE "@$row\n";
}
$| = 1;
print "Processed records $range to $counter";
print "\r";
$counter = $counter + 50;
$range = $range + 50;
$te = HTML::TableExtract->new;
}
}
sub cleanup() {
for ( @_ ) {
s/s+/ /g;
}
}
sub workDir() {
# Use home directory to process data
chdir or die "$!";
if ( ! -d $processdir ) {
mkdir ("$ENV{HOME}/$processdir", 0755) or die "Cannot make directory $processdir: $!";
}
}