"ini"-Datei auslesen

Post Reply
Message
Author
Gast

"ini"-Datei auslesen

#1 Post by Gast »

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.

User avatar
hastifranki
Posts: 259
Joined: 06. May 2006 19:58

#2 Post by hastifranki »

Hallo,

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

Code: Select all

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 Post by Gast »

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 Post by Gast »

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: Select all

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

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#5 Post by Janka »

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: Select all

#!/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
Last edited by Janka on 04. Feb 2012 15:07, edited 1 time in total.
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Gast

#6 Post by Gast »

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!

Post Reply