"ini"-Datei auslesen

Antworten
Nachricht
Autor
Gast

"ini"-Datei auslesen

#1 Beitrag von Gast » 03. Feb 2012 11:50

Hallo an alle

Ich habe da ein wahrscheinlich winziges Problemchen. Ich habe die Suchfunktion verwendet und allerhand Tipps erläuterungen und Codeschnipzel gefunden, mit denen ich wahrscheinlich sogar eine Lösung hingebastelt bekäme. Ich hätte es nur nicht verstanden!

Ich habe eine „ini“-Datei nach foldendem Schema:
[Ident_001]
Name=Wert
Vorname=Wert
PLZ=Wert
und so weiter …

[Ident_002]
Name=Wert
Vorname=Wert

und so weiter, und so weiter …
Nun muss ich einige dieser Werte in eine andere Datei schreiben. Die auszulesenden Werte sind bekannt (jedenfalls die Bezeichnung). In der anderen (neuen) Datei bekommen sie jedoch eine andere Bezeichnung. Jetzt habe ich mir das in etwa so vorgestellt:
file_in=Pfad_zur_auszulesenden_Datei
file_out=Pfad_zur_neuen_Datei
file_log=Pfad_zu_einer_neuen_log-Datei

for ((i=1; i<=1000; i++)); do
ini_in_name=$file_in . Ident#+i . name;
ini_in_vorname=$file_in . Ident#+i . vorname;
$file_out>>ID_Neu . User+i . $ini_in_name + &#8222;, &#8222; + $ini_in_vorname;
done
Ich hoffe es wird klar, worauf ich hienaus will.

Ich danke vielmals, bereits vorab.

Benutzeravatar
hastifranki
Beiträge: 259
Registriert: 06. Mai 2006 19:58

#2 Beitrag von hastifranki » 03. Feb 2012 15:38

Hallo,

mit sed kann man diesbezüglich viel machen. Vielleicht hilft das weiter:

Code: Alles auswählen

cat test.txt | fmt | grep Ident | sed -e 's/^\&#91;Ident_\&#40;.*\&#41;\&#93;/\1/' -e 's/Name=\&#40;.*\&#41; Vorname=\&#40;.*\&#41; PLZ=\&#40;.*\&#41;/ \1 \2 \3 /' | nl >>neue_Datei.txt
VG
Frank

Gast

#3 Beitrag von Gast » 03. Feb 2012 17:07

Danke hastifranki ...

Ich habe jetzt leider keine Zeit das zu testen. Ich bin mir aber sicher, dass es funktionieren wird.

Leider kann ich jedoch keinen Reim drauf machen. Ich weiß leider nicht, warum dass so funktionieren wird. Ich werde mir den Befehl sed mal genau ansehen.

Vielleicht ist es möglich dass mir jemand diese Codezile einmal zerlegt und mit KommentAren versieht, sodass ich sie nachvollziehen kann.

Nochmals ... Vielen Dank orab.

Gast

#4 Beitrag von Gast » 03. Feb 2012 18:37

So ... Ich habe mir das mit dem sed Befehl jetzt mal ein wenig angesehen ... Natürlich funktioniert der Script von hastifranki ... nochmals Danke

Dennoch glaube ich, dass das nicht das Richtige für mich ist.

Ich möchte mir bestimmt Werte aus einer INI-Datei einlesen und diese dann im weiteren Programmverlauf verwenden können (wenn ich das will). Soll heißen, ich hätte sie gerne als Variablen.

Das Problem bei der sed Version ist, dass hier schon eine kleine Abweichung ausreicht und es funktioniert nicht mehr richtig ... bspw. wenn die Positionen von Name und Vorname vertauscht sind.

Gibt es für Bash-Scripte nicht soetwas wie folgt (am obigen Beispiel orientiert)?

Code: Alles auswählen

ini.ReadString&#40;'Ident_001','Name','Wert_falls_leer'&#41;;   // wobei ini. für die INI-Datei steht

Benutzeravatar
Janka
Beiträge: 3573
Registriert: 11. Feb 2006 19:10

#5 Beitrag von Janka » 03. Feb 2012 19:57

Die Bash ist für ini-Dateien nicht besonders gut geeignet. Man kann doch aber auch eine andere Skriptsprache nehmen! Ich mach sowas mit tcl, im Zusatzpaket tcllib ist eine Bibiothek zum Verarbeiten von Inifiles drin. Die Syntax ist der Bash ziemlich ähnlich (Befehl -Option1 -Option2 Parameter 1 Parameter2 ...), wobei tcl für Stringverarbeitung und Rechnen viel besser geeignet ist als die Bash.

Code: Alles auswählen

#!/usr/bin/tclsh
package require inifile

set inidatei "xyz.ini"

## Open ini file.
set ini &#91;&#58;&#58;ini&#58;&#58;open $inidatei&#93;

## Get values from inifile.
set Name &#91;&#58;&#58;ini&#58;&#58;value $ini Indent_001 Name&#93;
set Vorname &#91;&#58;&#58;ini&#58;&#58;value $ini Indent_001 Vorname&#93;
...
Zurückschreiben von Werten in die Ini-Datei ist genauso einfach.

Auch für andere Skriptsprachen gibt es solche Bibliotheken. Und im Gegensatz zu MS-Windows ist es ja auch kein Beinbruch, sie als Abhängigkeit festzulegen. Zumindest Perl, Tcl, PHP, Ruby und ein paar mehr sind in praktisch allen Distributionsarchiven drin.

Janka
Zuletzt geändert von Janka am 04. Feb 2012 15:07, insgesamt 1-mal geändert.
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Gast

#6 Beitrag von Gast » 04. Feb 2012 10:51

Suuuuper ... Viiiiiielen Dank ... Genau sowas habe ich gesucht.

Schade das das nicht mit Bash direkt geht. Wäre schön gewesen. Zuhause kann ich mir ja problemlos tclsh nachinstallieren. Ich weiss aber nicht, ob das da okay ist wo ich es brauche. Muss ich mal sehen. Sonst muss ich die Datei eben mitnehmen.

Also nochmals vielen Dank!

Antworten