Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
"ini"-Datei auslesen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Gast
Gast





BeitragVerfasst am: 03. Feb 2012 11:50   Titel: "ini"-Datei auslesen

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:

Zitat:

[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:

Zitat:

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 + „, „ + $ini_in_vorname;
done


Ich hoffe es wird klar, worauf ich hienaus will.

Ich danke vielmals, bereits vorab.
 

hastifranki



Anmeldungsdatum: 06.05.2006
Beiträge: 252

BeitragVerfasst am: 03. Feb 2012 15:38   Titel:

Hallo,

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

Code:
cat test.txt | fmt | grep Ident | sed -e 's/^\[Ident_\(.*\)\]/\1/' -e 's/Name=\(.*\) Vorname=\(.*\) PLZ=\(.*\)/ \1 \2 \3 /' | nl >>neue_Datei.txt


VG
Frank
 
Benutzer-Profile anzeigen Private Nachricht senden

Gast
Gast





BeitragVerfasst am: 03. Feb 2012 17:07   Titel:

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
Gast





BeitragVerfasst am: 03. Feb 2012 18:37   Titel:

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:
ini.ReadString('Ident_001','Name','Wert_falls_leer');   // wobei ini. für die INI-Datei steht
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 03. Feb 2012 19:57   Titel:

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:

#!/usr/bin/tclsh
package require inifile

set inidatei "xyz.ini"

## Open ini file.
set ini [::ini::open $inidatei]

## Get values from inifile.
set Name [::ini::value $ini Indent_001 Name]
set Vorname [::ini::value $ini Indent_001 Vorname]
...

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
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Zuletzt bearbeitet von Janka am 04. Feb 2012 15:07, insgesamt 1-mal bearbeitet
 
Benutzer-Profile anzeigen Private Nachricht senden

Gast
Gast





BeitragVerfasst am: 04. Feb 2012 10:51   Titel:

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!
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy