2006年05月31日 06:06
今格闘していること
- 分割回数を示す「{n}」オプションで、*を指定するとエラーになる。なぜ?
- おそらく漢字コードの問題かと思うのだけれど、こちらが指定したところとはまったく別のところでファイルが分割されてしまう(ほとんどはうまく分割できるのに、ダメな部分が発生する)。
by OKAMURA(2006-05-31T03:22:06-05:00)
> 別のところでファイルが分割されてしまう
HaloScan の XML はマルチバイト文字の途中で切られるという問題が直っていないですから、それのせいかも知れませんね。
Perl で書いてみました。XML は真面目に処理せずに正規表現でやったのでかなり速いと思います。次のコメントにコピペします。
by OKAMURA(2006-05-31T03:22:48-05:00)
#!/usr/bin/perl -w
use strict;
use utf8;
no encoding;
use vars qw(
%Thread
);
%Thread = ();
{
my $id = '';
my $contents = '';
while (my $line = <>) {
if ($line =~ m/<threads+id="([^"]*)"s*>/) {
$id = $1;
$contents = '';
}
elsif ($line =~ m/</threads*>/) {
$Thread{$id} = '' unless (exists $Thread{$id});
$Thread{$id} .= $contents;
}
else {
$contents .= $line;
}
}
}
while (my ($id, $contents) = each %Thread) {
my $fh;
my $fname = sprintf('%s.xml', $id);
if (open $fh, ">$fname") {
print $fh <<"EOF";
<?xml version="1.0" ?>
<comments>
<thread id="$id">
EOF
print $fh $contents;
print $fh <<'EOF';
</comment>
</thread>
</comments>
EOF
close $fh;
}
else {
printf STDERR "%s: %sn", "$?", $fname;
}
}
by OKAMURA(2006-05-31T03:24:28-05:00)
あ! 一部スマイリーになってしまいました。バックスラッシュも消えてしまいました。
なぞなぞということにしておきます。 :lol:
by OKAMURA(2006-05-31T03:30:05-05:00)
あ、後ろから 10 行目の
</comment>
の行は余計でした。
度々済みません。
by 會澤(2006-05-31T12:51:13-05:00)
うげっ!なんかすごいことになっている。
perlはなかなかうまいこと使いこなせないのですが、参考にさせていただきます。
NanoBloggerへの実装方法についてもまだトライしている最中です。はたしてうまくいくでしょうか。
毎度^2。ありがとうございます。
by OKAMURA(2006-05-31T03:22:06-05:00)
> 別のところでファイルが分割されてしまう
HaloScan の XML はマルチバイト文字の途中で切られるという問題が直っていないですから、それのせいかも知れませんね。
Perl で書いてみました。XML は真面目に処理せずに正規表現でやったのでかなり速いと思います。次のコメントにコピペします。
by OKAMURA(2006-05-31T03:22:48-05:00)
#!/usr/bin/perl -w
use strict;
use utf8;
no encoding;
use vars qw(
%Thread
);
%Thread = ();
{
my $id = '';
my $contents = '';
while (my $line = <>) {
if ($line =~ m/<threads+id="([^"]*)"s*>/) {
$id = $1;
$contents = '';
}
elsif ($line =~ m/</threads*>/) {
$Thread{$id} = '' unless (exists $Thread{$id});
$Thread{$id} .= $contents;
}
else {
$contents .= $line;
}
}
}
while (my ($id, $contents) = each %Thread) {
my $fh;
my $fname = sprintf('%s.xml', $id);
if (open $fh, ">$fname") {
print $fh <<"EOF";
<?xml version="1.0" ?>
<comments>
<thread id="$id">
EOF
print $fh $contents;
print $fh <<'EOF';
</comment>
</thread>
</comments>
EOF
close $fh;
}
else {
printf STDERR "%s: %sn", "$?", $fname;
}
}
by OKAMURA(2006-05-31T03:24:28-05:00)
あ! 一部スマイリーになってしまいました。バックスラッシュも消えてしまいました。
なぞなぞということにしておきます。 :lol:
by OKAMURA(2006-05-31T03:30:05-05:00)
あ、後ろから 10 行目の
</comment>
の行は余計でした。
度々済みません。
by 會澤(2006-05-31T12:51:13-05:00)
うげっ!なんかすごいことになっている。
perlはなかなかうまいこと使いこなせないのですが、参考にさせていただきます。
NanoBloggerへの実装方法についてもまだトライしている最中です。はたしてうまくいくでしょうか。
毎度^2。ありがとうございます。
Posted by kaizawa | TrackBacks