tools/Translator/read.pl

69 lines
1.5 KiB
Perl

#!/usr/bin/perl
use strict;
use warnings;
use v5.26;
use Carp;
use File::Find;
use DBI;
my $db =
DBI->connect( "DBI:SQLite:dbname=../data.db", "", "", { RaiseError => 1 } )
or confess $DBI::errstr;
sub sqlstr {
my ( $table, $primary ) = @_;
return qq
/create table if not exists $table (
id integer / . ( $primary ? 'primary key autoincrement' : '' ) . qq/,
title text,
filepath text,
content text
);/;
}
my %tablesql = (
"origin" => sqlstr( "origin", 1 ),
"trans" => sqlstr( "trans", 0 ),
);
my $act;
for my $table ( keys %tablesql ) {
$act = $db->prepare( $tablesql{$table} );
$act->execute() or confess $DBI::errstr;
}
my @data;
finddepth(
sub {
return unless ( $_ =~ /.md$/ );
push @data, $File::Find::name;
},
'../data/'
);
my $csql = qq
/insert into origin (title,filepath,content)
values (?,?,?);/;
for my $d (@data) {
my %info;
my $content;
open my $file, "< :encoding(UTF-8)", $d;
my $line = <$file>;
if ( $line eq '---' ) {
while (<$file>) {
chomp;
if (/^([^:]+):\s+(.+)/) {
$info{$1} = $2;
}
last if /---/;
}
}
else {
$content = $line;
}
while (<$file>) {
$content .= $_;
}
close($file);
$act = $db->prepare($csql);
$act->execute( $info{'title'}, $d, $content ) or carp $DBI::errstr;
$act->finish() or carp $DBI::errstr;
}