Hi alle zusammen,
ich benutze seit Jahren Quicken bzw. den Nachfolger FinanzManager von LexWare. Die geänderten Geschäftsbedingungen von Microsoft (siehe auch hier) veranlassen mich komplett auf Linux umzusteigen. Somit versuche ich auf Hibiscus umzusatteln.
Für den Import einiger Offline-Konten vom FinanzManager in Hibiscus habe ein kleines AWK-Script zur Konvertierung der Datensätze aus dem FinanzManager geschrieben. Mit Hilfe des Scripts entsteht eine CSV-Datei, die sich in Hibiskus importieren lässt. Das ist vielleicht auch für andere interessant.
Windows-User sind hier erst einmal außen vor. Das Script lässt sich möglicherweise auch für Windows nutzen, wenn man ein entsprechendes Programm für Windows installiert (z.B. von https://gnuwin32.sourceforge.net/packages/gawk.htm).
Exportiert man ein Konto im FinanzManger, dann hat die exportierte Datei (Haushaltskasse.QIF) folgendes Format:
!Option:MDY
!Type:Cash
D1.1.02
U126.72
T126.72
CX
PEröffnungssaldo
L[Haushaltskasse]
^
D1.7.02
U500.00
T500.00
CX
PKarsten S
MGA-EU0000XXX0 KARTE 2/12.0207.01 08.51 00XXX1/ 08XXX8
L[Postgiro Karsten]
^
D1.7.02
U-21.37
T-21.37
CX
POBI
MDosen,Klingelleitung
L[Wohnhaus]
^
Diese habe ich nun mit folgenden Script (QIF2hibiscus.awk) in ein CSV-File konvertiert.
function ChangeUmlaut(str) {
gsub(/\xc4/,"Ä",str); gsub(/\xd6/,"Ö",str); gsub(/\xdc/,"Ü",str); gsub(/\xe4/,"ä",str); gsub(/\xf6/,"ö",str); gsub(/\xfc/,"ü",str); gsub(/\xdf/,"ß",str);
return str
}
function FormatDate(field) {
split(field,a,"."); newdate=sprintf("%02d.%02d.20%02d", a[2], a[1], a[3]);
return newdate
}
BEGIN {
Konto="Haushaltskasse";
RS = "^"; FS = "\n";
print "\"#\";\"IBAN\";\"BIC\";\"Konto\";\"Gegenkonto\";\"Gegenkonto BLZ\";\"Gegenkonto Inhaber\";\"Betrag\";\"Valuta\";\"Datum\";\"Verwendungszweck\";\"Verwendungszweck 2\";\"Zwischensumme\";\"Primanota\";\"Kundenreferenz\";\"Kategorie\";\"Notiz\";\"Weitere Verwendungszwecke\";\"Art\";\"Vormerkbuchung\";\"End-to-End ID\";\"Kategorie-Pfad\";\"Mandatsreferenz\";\"Gläubiger ID\""
zwischensumme=0.0;
} {
#CONVFMT = "%2.2f";
GegenkontoInhaber=""; datum=""; betrag=0.0; newdate=""; verwendungszweck=""; kategorie=""; kategoriepfad="";
for (i=1;i<=NF;i++) {
gsub("\r","",$i);
if (substr($i,1,1) == "D") {
gsub("D","",$i); datum=$i;
} else if (substr($i,1,1) == "U") {
gsub("U","",$i); gsub(",","",$i); gsub("\\.",",",$i); betrag=$i; zwischensumme += betrag;
} else if (substr($i,1,1) == "P") {
gsub("^P","",$i); GegenkontoInhaber=ChangeUmlaut($i);
} else if (substr($i,1,1) == "M") {
gsub("^M","",$i); gsub(" +"," ",$i);
verwendungszweck=ChangeUmlaut($i);
} else if (substr($i,1,1) == "L") {
gsub("^L","",$i);
if (substr($i,1,1) != "[") {
kategoriepfad=ChangeUmlaut($i);
n=split(kategoriepfad,A,":");
kategorie=A[n];
gsub(":","/",kategoriepfad);
}
}
}
if (datum!="") {
newdate=FormatDate(datum);
## printf "\"%d\";\"\";\"\";\"%s\";\"\";\"\";\"%s\";\"%.2f\";\"%.2f\";\"%s\";\"%s\";\"\";\"%.2f\";\"\";\"\";\"%s\";\"\";\"\";\"\";\"\";\"\";\"%s\";\"\";\"\"\n", FNR, Konto, GegenkontoInhaber, betrag, valuta, newdate, verwendungszweck, zwischensumme, kategorie, kategoriepfad;
printf "\"%d\";\"\";\"\";\"%s\";\"\";\"\";\"%s\";\"%.2f\";\"%s\";\"%s\";\"%s\";\"\";\"%.2f\";\"\";\"\";\"%s\";\"\";\"\";\"\";\"\";\"\";\"%s\";\"\";\"\"\n", FNR, Konto, GegenkontoInhaber, betrag, newdate, newdate, verwendungszweck, zwischensumme, kategorie, kategoriepfad;
}
}
Das Script wird mit folgendem Befehl auf der Linux-Console aufgerufen:
$ LC_CTYPE=C awk --use-lc-numeric -f QIF2hibiscus.awk Haushaltskasse.QIF >Haushaltskasse.csv
Der Schalter –use-lc-numeric ist nicht bei jeder awk-Version nötig. Sollte beim Aufruf ein Fehler ausgegeben werden, einfach das Script ohne diesen Schalter aufrufen.
Die entstehende Datei (Haushaltskasse.csv) sieht so aus:
"#";"IBAN";"BIC";"Konto";"Gegenkonto";"Gegenkonto BLZ";"Gegenkonto Inhaber";"Betrag";"Valuta";"Datum";"Verwendungszweck";"Verwendungszweck 2";"Zwischensumme";"Primanota";"Kundenreferenz";"Kategorie";"Notiz";"Weitere Verwendungszwecke";"Art";"Vormerkbuchung";"End-to-End ID";"Kategorie-Pfad";"Mandatsreferenz";"Gläubiger ID"
"1";"";"";"Haushaltskasse";"";"";"Eröffnungssaldo";"126,72";"01.01.2002";"01.01.2002";"";"";"126,72";"";"";"";"";"";"";"";"";"";"";""
"2";"";"";"Haushaltskasse";"";"";"Karsten S";"500,00";"07.01.2002";"07.01.2002";"GA-EU0000XXX0 KARTE 2/12.0207.01 08.51 00XXX1/ 08XXX8";"";"626,72";"";"";"";"";"";"";"";"";"";"";""
"3";"";"";"Haushaltskasse";"";"";"OBI";"-21,37";"07.01.2002";"07.01.2002";"Dosen,Klingelleitung";"";"605,35";"";"";"";"";"";"";"";"";"";"";""
Diese erzeugte CSV-Datei ließ sich problemlos in Hibiscus importieren.
ich benutze seit Jahren Quicken bzw. den Nachfolger FinanzManager von LexWare. Die geänderten Geschäftsbedingungen von Microsoft (siehe auch hier) veranlassen mich komplett auf Linux umzusteigen. Somit versuche ich auf Hibiscus umzusatteln.
Für den Import einiger Offline-Konten vom FinanzManager in Hibiscus habe ein kleines AWK-Script zur Konvertierung der Datensätze aus dem FinanzManager geschrieben. Mit Hilfe des Scripts entsteht eine CSV-Datei, die sich in Hibiskus importieren lässt. Das ist vielleicht auch für andere interessant.
Windows-User sind hier erst einmal außen vor. Das Script lässt sich möglicherweise auch für Windows nutzen, wenn man ein entsprechendes Programm für Windows installiert (z.B. von https://gnuwin32.sourceforge.net/packages/gawk.htm).
Exportiert man ein Konto im FinanzManger, dann hat die exportierte Datei (Haushaltskasse.QIF) folgendes Format:
Code
!Option:MDY
!Type:Cash
D1.1.02
U126.72
T126.72
CX
PEröffnungssaldo
L[Haushaltskasse]
^
D1.7.02
U500.00
T500.00
CX
PKarsten S
MGA-EU0000XXX0 KARTE 2/12.0207.01 08.51 00XXX1/ 08XXX8
L[Postgiro Karsten]
^
D1.7.02
U-21.37
T-21.37
CX
POBI
MDosen,Klingelleitung
L[Wohnhaus]
^
Diese habe ich nun mit folgenden Script (QIF2hibiscus.awk) in ein CSV-File konvertiert.
Code
function ChangeUmlaut(str) {
gsub(/\xc4/,"Ä",str); gsub(/\xd6/,"Ö",str); gsub(/\xdc/,"Ü",str); gsub(/\xe4/,"ä",str); gsub(/\xf6/,"ö",str); gsub(/\xfc/,"ü",str); gsub(/\xdf/,"ß",str);
return str
}
function FormatDate(field) {
split(field,a,"."); newdate=sprintf("%02d.%02d.20%02d", a[2], a[1], a[3]);
return newdate
}
BEGIN {
Konto="Haushaltskasse";
RS = "^"; FS = "\n";
print "\"#\";\"IBAN\";\"BIC\";\"Konto\";\"Gegenkonto\";\"Gegenkonto BLZ\";\"Gegenkonto Inhaber\";\"Betrag\";\"Valuta\";\"Datum\";\"Verwendungszweck\";\"Verwendungszweck 2\";\"Zwischensumme\";\"Primanota\";\"Kundenreferenz\";\"Kategorie\";\"Notiz\";\"Weitere Verwendungszwecke\";\"Art\";\"Vormerkbuchung\";\"End-to-End ID\";\"Kategorie-Pfad\";\"Mandatsreferenz\";\"Gläubiger ID\""
zwischensumme=0.0;
} {
#CONVFMT = "%2.2f";
GegenkontoInhaber=""; datum=""; betrag=0.0; newdate=""; verwendungszweck=""; kategorie=""; kategoriepfad="";
for (i=1;i<=NF;i++) {
gsub("\r","",$i);
if (substr($i,1,1) == "D") {
gsub("D","",$i); datum=$i;
} else if (substr($i,1,1) == "U") {
gsub("U","",$i); gsub(",","",$i); gsub("\\.",",",$i); betrag=$i; zwischensumme += betrag;
} else if (substr($i,1,1) == "P") {
gsub("^P","",$i); GegenkontoInhaber=ChangeUmlaut($i);
} else if (substr($i,1,1) == "M") {
gsub("^M","",$i); gsub(" +"," ",$i);
verwendungszweck=ChangeUmlaut($i);
} else if (substr($i,1,1) == "L") {
gsub("^L","",$i);
if (substr($i,1,1) != "[") {
kategoriepfad=ChangeUmlaut($i);
n=split(kategoriepfad,A,":");
kategorie=A[n];
gsub(":","/",kategoriepfad);
}
}
}
if (datum!="") {
newdate=FormatDate(datum);
## printf "\"%d\";\"\";\"\";\"%s\";\"\";\"\";\"%s\";\"%.2f\";\"%.2f\";\"%s\";\"%s\";\"\";\"%.2f\";\"\";\"\";\"%s\";\"\";\"\";\"\";\"\";\"\";\"%s\";\"\";\"\"\n", FNR, Konto, GegenkontoInhaber, betrag, valuta, newdate, verwendungszweck, zwischensumme, kategorie, kategoriepfad;
printf "\"%d\";\"\";\"\";\"%s\";\"\";\"\";\"%s\";\"%.2f\";\"%s\";\"%s\";\"%s\";\"\";\"%.2f\";\"\";\"\";\"%s\";\"\";\"\";\"\";\"\";\"\";\"%s\";\"\";\"\"\n", FNR, Konto, GegenkontoInhaber, betrag, newdate, newdate, verwendungszweck, zwischensumme, kategorie, kategoriepfad;
}
}
Das Script wird mit folgendem Befehl auf der Linux-Console aufgerufen:
Code
$ LC_CTYPE=C awk --use-lc-numeric -f QIF2hibiscus.awk Haushaltskasse.QIF >Haushaltskasse.csv
Der Schalter –use-lc-numeric ist nicht bei jeder awk-Version nötig. Sollte beim Aufruf ein Fehler ausgegeben werden, einfach das Script ohne diesen Schalter aufrufen.
Die entstehende Datei (Haushaltskasse.csv) sieht so aus:
Code
"#";"IBAN";"BIC";"Konto";"Gegenkonto";"Gegenkonto BLZ";"Gegenkonto Inhaber";"Betrag";"Valuta";"Datum";"Verwendungszweck";"Verwendungszweck 2";"Zwischensumme";"Primanota";"Kundenreferenz";"Kategorie";"Notiz";"Weitere Verwendungszwecke";"Art";"Vormerkbuchung";"End-to-End ID";"Kategorie-Pfad";"Mandatsreferenz";"Gläubiger ID"
"1";"";"";"Haushaltskasse";"";"";"Eröffnungssaldo";"126,72";"01.01.2002";"01.01.2002";"";"";"126,72";"";"";"";"";"";"";"";"";"";"";""
"2";"";"";"Haushaltskasse";"";"";"Karsten S";"500,00";"07.01.2002";"07.01.2002";"GA-EU0000XXX0 KARTE 2/12.0207.01 08.51 00XXX1/ 08XXX8";"";"626,72";"";"";"";"";"";"";"";"";"";"";""
"3";"";"";"Haushaltskasse";"";"";"OBI";"-21,37";"07.01.2002";"07.01.2002";"Dosen,Klingelleitung";"";"605,35";"";"";"";"";"";"";"";"";"";"";""
Diese erzeugte CSV-Datei ließ sich problemlos in Hibiscus importieren.