PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : daten aus config datei in variable packen



boba
11-03-2006, 09:17
Ich habe eine config datei in der verschiedene Pfade angegeben sind und diese soll zur Laufzeit ausgelesen werden, das auslesen ist soweit fertig ich bin mir nur nicht sicher wie ich die werte direkt zuweisen kann:
die Daten werden über bla = 1, blub = 2 zugewiesen.
In der printf Ausgabe steht eigentlich das was ich als zuweisung haben möchte.


#include <stdio.h>
//#include <gtk.h>

int main(int argc, char **argv) {
FILE *fp = fopen("test.conf", "r");
char var[512],
value[512],
line[512];

if (fp) {
while (fgets(line, sizeof(line), fp)) {
memset(var, 0, sizeof(var));
memset(value, 0, sizeof(value));
if (sscanf(line, "%[^ \t=]%*[\t ]=%*[\t ]%[^\n]", var, value) == 2) {

printf("%s=%s\n",var, value);
//return var=value;
}
}
fclose(fp);
}

return 0;
}

Die pfade sind zz so definiert:

gchar 1_path[] = "/opt/1";
gchar 2_path[] = "...";
gchar 3_path[] = "...";

danke

jeebee
11-03-2006, 09:43
versuchs mal mit strcpy(char *dest, char *src)

boba
11-03-2006, 10:24
ich versteh grad nicht wie ich dann den variablen die Werte zuweise...
Das sieht jetzt so aus:


gchar name_path[512];
gchar shots_path[512];
gchar config_path[512];

//printf("%s=%s\n",var, value);

if(var == "name_path")
strcpy(name_path, value);
//name_path = value;
if(var == "shots_path")
strcpy(shots_path, value);
//shots_path = value;
if(var == "config_path")
strcpy(config_path, value);
//config_path = value;
printf("%s\n",uae_path);


Und wie würde die Return anweisung aussehen?

Joghurt
11-03-2006, 13:40
if (sscanf(line, "%[^ \t=]%*[\t ]=%*[\t ]%[^\n]", var, value) == 2) {
Das funktioniert? sscanf kann doch gar keine Regexp, oder?

boba
11-03-2006, 14:55
probiers einfach mal aus, hab ich auch nur durch googeln gefunden

anda_skoa
11-03-2006, 17:04
ich versteh grad nicht wie ich dann den variablen die Werte zuweise...

Brauchst du nicht mehr, das strcpy kopiert den Inhalt von value in den den anderen String .

Übrigens geht "==" bei C Strings nicht

Ciao,
_

jeebee
11-03-2006, 17:40
btw in diesem Zusammenhang würde ein return gar nichts bringen, da du ja alles in der Funktion int main() hast. Bei dieser Funktion muss ein return-Wert ein Integer sein und spiegelt den Programm-Beendungs-Status wieder.

boba
11-03-2006, 18:03
Ich habs über einen counter geregelt, 0te zeile ist path 1 usw

if(i == 0)
strcpy(name_path, value);

nicht sehr flexibel aber geht, danke.

jeebee
11-03-2006, 22:54
strings vergleichen geht in C mit dem befehl strcmp(char *str1, char *str2) ... die Funktion ergibt 0 bei Gleichheit und einen anderen (positiven oder negativen) Integerwert bei Ungleichheit

für eine Übersicht über String-Funktionen in C mal
man string.h in einem Terminal eintippen...

gorba
13-03-2006, 10:02
ich würd in der datei nach bestimmten wörtern parsen bez:
Zeile auslesen
pointer auf anfang von string setzen
whitespaces entfernen (egal welche und wiviel) über den pointer realisieren
nach wort parsen
wort aus string entfernen (pointer verschieben)
wert auslesen (sscanf --> anlass für schönes errorhandling)
wenn /0 erreicht, hole neue zeile
return und beginne von neuem

RHBaum
13-03-2006, 10:31
//#include <gtk.h>
hat die gtk nich auch support fuer config files ? wenn dann wuerd ich das nehmen.

@boba
du solltest dir dringenst noch mal strings und deren konzept unter C anschauen. Das sind grundlegendste grundlagen ^^ Ohne dieses wissen wirst sehr schnell an grenzen stossen. Wenn du grad erst mit C anfaengst, ok ... dann weisst wo du noch wissen brauchst, wenn du schon ne weile mit c arbeitest, sollten deine Fragen/Probleme im Quellcode eigentlich niemals auftauchen ...

Hier waer jetzt nen Buchtipp angebracht ^^ aber mit C-Buechern kenn ich mich ned aus, ich geh eher auf c++. vielleicht koennen die anderen da nachhelfen ?

Ciao ....

gorba
13-03-2006, 10:43
literaturtipp: manpages

dort steht meist/immer alles. ansonsten:
ge-packt (kleine version des c buchs)
ent-packt (grosse version)

weiss aber nich mehr genau von wem bez. isbn nr --> googel hilft dir

RHBaum
13-03-2006, 10:56
naja die manpages liefern einem hilfe zu den jeweiligen befehlen ....
Fuer nen ueberblick und konzeptionelle geschichten sind die eher ungeeignet. Als Nachschlagewerk hingegen goldwert

Ich mag aber lieber gedrucktes zeugs ... abgeblich lernt man ja am besten im schlaf .... nen buch unterm kopfkissen iss ja ok, aber nen tft monitor wuerde mir schon alptraeume bringen, besonders morgens beim erwachen ^^
Das ist aber geschmackssache, gibt ne menge hilfreiche c tutorials im netz ...

Ciao ...

jeebee
13-03-2006, 19:33
Zum Nachschlagen und auch etwas Theorie:
* Addison-Wesley: C Kompakt-Referenz
Linux-spezifische Themen:
* Hanser: C und Linux
* Addison-Wesley: Linux/Unix Systemprogrammierung

Ansonsten (kenn ich nicht)
* O'Reilly: ist eigentlich immer gut, hab da allerdings kein C Buch...

nicht unbedingt:
* M&T: C easy -- ist im Ansatz gut, wäre für Anfänger gut geeignet, wenn alle Code-Beispiele funktionieren würden.

boba
14-03-2006, 07:20
danke für die Antworten, ich bin mit meinem Gnome Buch noch nicht soweit als das es auf konfigurationsdateien eingehen würde (gconf wird as wohl sein.).
Ich nutze teilweise das devhelp welches jegliche manpages und andere Referenzen enthält.

Zum Buchtip: Ich hatte "C von A bis Z" im Kopf, einige Bekannte haben das und meinen das wär ganz gut.
Das Linux/Unix-Systemprogrammierung soll wohl eine Übersetzung eines in English erschienen Buches sein, da hatte ich das Buch zum selben Thema vom C von A bis Z Autor in betracht gezogen, oft werden diese beiden bei empfehlungen nicht genannt, gibs da nen Grund für?

RHBaum
14-03-2006, 08:27
@Boba

Ich wuerd an deiner stelle vorerst mal die gtk ganz sein lassen und einfach bisserl mit stinknormalen Anwendungen probieren, die nur auf die Standard ein und ausgabe schreiben.

Iss sicher etwas trocken, aber der Lerneffekt sollte groesser und schneller sein weil dich da wirklich nur mit c grundlagen rumaergern musst.


oft werden diese beiden bei empfehlungen nicht genannt, gibs da nen Grund für?
Linux/Unix-Systemprogrammierung setzt massiv kenntnisse von C vorraus.
es beschreibt internas vom der Posix / SystemV API auf ziemlich niedrigem level.
Das sind Bereiche wo normale Anwendungsentwickler recht selten vorstossen. Die meisten nutzen doch lieber fertige Frameworks ala gtk, qt usw.

Wer Linux Systemtools schreiben will, wird sich damit auseinandersetzen muessen, wer bisserl was ueber die Linux internas erfahren moechte, oder noch paar grundlegende Grundlagen zu TCP/IP braucht, wird da auch das eine oder andere nuetzliche finden.

Ich selbst hab es auch rumliegen, zum programmieren selber hab ichs ehrlich recht selten gebraucht, weils eigentlich ned meine domaene ist.

Ciao ...

panzi
14-03-2006, 18:24
http://www.mrunix.de/forums/showthread.php?t=39224