3 function STRING( inp ) {
4 gsub(/\\/, "\\\\", inp);
5 gsub(/\n/, "\\n", inp);
6 gsub(/\r/, "\\r", inp);
7 gsub(/\t/, "\\t", inp);
8 gsub(/\+/, "\\+", inp);
10 return inp ? inp : "\\";
13 function UNSTRING( inp, out, tmp ) {
15 if ( inp ~ /^\\\\/) { out = out "\\"; sub(/^\\\\/, "", inp); }
16 else if ( inp ~ /^\\n/) { out = out "\n"; sub(/^\\n/, "", inp); }
17 else if ( inp ~ /^\\r/) { out = out "\r"; sub(/^\\r/, "", inp); }
18 else if ( inp ~ /^\\t/) { out = out "\t"; sub(/^\\t/, "", inp); }
19 else if ( inp ~ /^\\+/) { out = out "+"; sub(/^\\+/, "", inp); }
20 else if ( inp ~ /^\+/) { out = out " "; sub(/^\+/, "", inp); }
21 else if ( inp ~ /^\\/) { out = out ""; sub(/^\+/, "", inp); }
22 else { tmp = inp; sub(/[\\+].*$/, "", tmp); out = out tmp; sub(/^[^\\+]*/, "", inp); }
27 function isdate( date, dt, y, m, d ) {
29 /^[0-9]{4}-((01|03|05|07|08|10|12)-(0[1-9]|[12][0-9]|3[01])|(04|06|09|11)-(0[1-9]|[12][0-9]|30)|02-(0[1-9]|[12][0-9]))$/ )) {
30 split( date, dt, "-");
31 y = dt[1]; m = dt[2]; d = dt[3];
33 } else if ( match( date,
34 /^((0?1|0?3|0?5|0?7|0?8|10|12)\/(0?[1-9]|[12][0-9]|3[01])|(0?4|0?6|0?9|11)\/(0?[1-9]|[12][0-9]|30)|0?2\/(0[1-9]|[12][0-9]))\/([0-9]{2}|[0-9]{4})$/ )) {
35 split( date, dt, "/");
36 m = dt[1]; d = dt[2]; y = dt[3];
38 } else if ( match( date,
39 /^((0?[1-9]|[12][0-9]|3[01])[\.\/](0?1|0?3|0?5|0?7|0?8|10|12)|(0?[1-9]|[12][0-9]|30)[\.\/](0?4|0?6|0?9|11)|(0[1-9]|[12][0-9])[\.\/]0?2)[\.\/]([0-9]{2}|[0-9]{4})$/ )) {
40 split( date, dt, /[\.\/]/);
41 d = dt[1]; m = dt[2]; y = dt[3];
45 if ( y < 100 && y > 50 ) y = y + 1900;
46 if ( y <= 50 ) y = y + 2000;
49 if ( m == 2 && d == 29 ) {
50 if ( y % 400 == 0 ) y = y;
51 else if ( y % 100 == 0 ) return "";
52 else if ( y % 4 == 0 ) y = y;
56 return sprintf("%04i-%02i-%02i", y, m, d);
59 function cents( val ) {
60 gsub(/\./, "", val); sub(/,/, ".", val);
66 dtrange_end = dt_from = dt_to = balance_start = balance_end = "";
68 rec[0] = "Date DateU IBAN Name Subject Amount"
71 /^([012]?[0-9]|30|31).(0?[1-9]|1[012]).[0-9]{4} - ([012]?[0-9]|30|31).(0?[1-9]|1[012]).[0-9]{4}$/ {
72 dtrange_end = $0; sub(/^.* - /, "", dtrange_end);
73 dt_from = $0; sub(/ - .*$/, "", dt_from); dt_from = isdate(dt_from);
74 dt_to = $0; sub(/^.* - /, "", dt_to ); dt_to = isdate(dt_to );
77 /^Letzter Kontostand;;;;[0-9\.,]+;EUR$/ {
78 balance_start = cents($5);
81 /Kontostand;[^;]+;;;[0-9\.,]+;EUR/ {
82 if ( $2 = dtrange_end ) balance_end = cents($5)
86 rec_date = isdate($1); gsub(/-/, " ", rec_date); rec_date = mktime(rec_date " 00 00 00", "UTC");
87 rec[length(rec)] = sprintf("%s %i %s %s %s %i",
88 isdate($1), rec_date, $6 ? $6 : "\\", STRING($4), STRING($5), cents($12));
92 if ( dt_from && dt_to ) {
93 dtu_from = dt_from; gsub(/-/, " ", dtu_from); dtu_from = mktime( dtu_from " 00 00 00", "UTC");
94 dtu_to = dt_to ; gsub(/-/, " ", dtu_to ); dtu_to = mktime( dtu_to " 00 00 00", "UTC");
96 printf "%i %s %i %s %i %i\n",
97 dtu_from, dt_from, dtu_to, dt_to, balance_start, balance_end;
98 for ( k = 1; k < length(rec); k++ ) print rec[k];