diff options
author | Daniel Friesel <derf@finalrewind.org> | 2021-01-01 11:48:57 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2021-01-01 11:48:57 +0100 |
commit | 9c7c491d219a4d8c25694d908617b3bb66292fe5 (patch) | |
tree | 546bd4bed0398e0025393b92bca14644309520af /lib | |
parent | c579b75b08134700f960fcf3b8c01e7d33136fd0 (diff) |
Export number of seats and wagon names to JSON
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/carriage-json.pl | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/carriage-json.pl b/lib/carriage-json.pl new file mode 100755 index 0000000..d0d0417 --- /dev/null +++ b/lib/carriage-json.pl @@ -0,0 +1,66 @@ +#!/usr/bin/env perl +# Copyright (C) 2020 Daniel Friesel +# +# SPDX-License-Identifier: BSD-2-Clause + +use strict; +use warnings; +use 5.020; + +use File::Slurp qw(read_file write_file); +use IPC::Run3; +use JSON; +use utf8; + +my ($json_file, $pdf_file, $key, @extra_keys) = @ARGV; + +my $command = [ "pdftotext", "-layout", "-nopgbrk", $pdf_file, "/dev/stdout" ]; +my $wagon_txt; + +run3($command, \undef, \$wagon_txt, undef, { binmode_stdout => ':encoding(utf-8)' } ); + +my @lines = split(qr{\n}, $wagon_txt); + + +my $name = $lines[0]; + +$name =~ s{^\s+}{}; +$name =~ s{\s+$}{}; + +my $json = JSON->new->utf8->decode(read_file($json_file)); + +my $data = {}; + +if ($name =~ m{ \d{3} \. \S \) }x) { + $data->{name} = $name; +} +else { + for my $line (@lines) { + if ($line =~ m{ \( ( D? (WL)? (A|AB|B|W) R? D? [acdehimpuvw] \S* \s+ [0-9A-Z.]+ ) \) }x) { + $data->{name} = "Wagen $1"; + last; + } + } +} + +for my $line (@lines) { + if ($line =~ m{Anzahl Plätze im (?:Großraum|Wagen):\s*(\d+)}) { + $data->{seats_open} = $1; + } + if ($line =~ m{Anzahl Plätze i[nm] Abteil[^:]*:\s*(\d+)}) { + $data->{seats_comp} = $1; + } + if ($line =~ m{Anzahl WC:\s*(\d+)}) { + $data->{wc} = $1; + } +} + +$data->{seats} = ($data->{seats_open} // 0) + ($data->{seats_comp} // 0); + +$json->{$key} = $data; + +for my $extra_key (@extra_keys) { + $json->{$extra_key} = {}; +} + +write_file($json_file, JSON->new->utf8->encode($json)); |