mehrere variablen aus datei lesen

M

mieke

Grünschnabel
Hallo,
ich hoffe, ihr wurde mit solcherlei Fragen nich schon allzu häufig belagert, aber ich weiß einfach nicht weiter.
Ich hab eine txt-Datei die folgender Maßen aussieht/aussehen soll:

Code:
1 175
2 75
3 155
4 0
0 255
etc...

Zuerst kommt eine Zahl von 0 bis 4 und dann eine von 0 bis 255.

Nun möchte ich gerne die Datei Zeile für Zeile auslesen bzw. zwei Variablen mit den beiden Zahlen jeder Zeile belegen. Ich habs schon mit sscanf und vfscanf versucht, hab aber immer nen Problem mit der Argumentenübergabe.. Ich vermute, da haut was mit den Pointern nich hin..

Gibt es da gravierende Unterschiede in C und C++? (Ich programmiere gerade in C, würde, aber umsteigen, wenn es mit C++ einfach wäre ;) )

Ich hab den Code leider auf meinen anderen Rechner, der is aber nich internetfähig und USB hat der auch nich - schrecklich, ich weiß aber ich hoffe, ihr habt nen paar Beispiel-Codezeilen für mich.

Schon mal liebe Dank,
mieke

PS: Hab auch nix dagegen, wenn ihr ein oder zwei Worte darüber verliert, wie ich in die Text-Datei schreibe (mit Hilfe zweier Variablen)... ;)
 
Einfach mit: fscanf(file, "%d %d", &foo, &bar);
Liesst aus dem stream "file" zwei integer aus und weiss den Variablen foo und bar selbige zu.

Schreiben funktioniert analog mit fprintf: fprintf(file, "%d %d\n", foo, bar);
 
und welchem Typ müssen/können foo und bar sein?
muss das beides nen int sein oder geht auch (unsigned) char?

und von welchem typ is file? int, stream, FILE*, ... ??
 
file ist ein FILE *. Ist auch in der manpage nachzulesen ;)
foo und bar muessen ints sein. Weiss leider nicht, wie man das mit chars machen kann, sry :/
Koenntest dir eine Funktion bauen, die das bewerkstelligt:
Code:
unsigned char getuchar()
{
        int i;
        scanf("%d", &i);
        getchar(); /* \n ueberspringen */
        return (unsigned char) i;
}

Ob das jetzt optimal ist, weiss ich nicht. Vielleicht gibt es ja auch eine bessere moeglichkeit.
 
aber würde ich mir %c nich nur die erste ziffer der 2. zahl bekommen?
 
ich brauch aber die ganze 3 stellige zahl in einem char (unsigned)... :(
 
@musikK: Char ist ja nicht gleich ein ascii Zeichen.

Also ich wurde entweder eine Funktion, wie oben genannte benutzen (kann man sicherlich noch verbessern) oder einfach ints nehmen. Intern wird sowieso oft mit ints gearbeitet.
 
Aber sicher ist ein char ein ASCII-Zeichen, was denn sonst?
 
Ein byte. Kann den wert von -128 - 127 oder von 0 - 255 annehmen.
Ascii ist ja nur die interpretation des bitmusters ;)
 
Hi,

Gibt es da gravierende Unterschiede in C und C++?

Natuerlich gibt es die. Ich finde String Parsing in C oder C++ ist eh eine Qual, wofuer gibt es denn Sprachen wie Perl? ;)
Aber wenn ich nur die Wahl zwischen C und C++ haette, wuerde ich persoenlich das lieber in C++ machen.
Siehe z.B. hier fuer eine kurze Einfuehrung:
http://math.hws.edu/eck/cs225/s03/files_and_strings.html

Aber wenn du eh schon in C angefangen hast, wuerde ich auch einfach dabei bleiben. Ist ja Quatsch wegen so einer Kleinigkeit die Sprache zu wechseln.

Was spricht jetzt dagegen, die Zahlen einfach als ints einzulesen, wie hier schon vorgeschlagen wurde, und danach in strings umzuwandeln? itoa() muesste die Funktion dafuer sein.
Siehe z.B. hier:
http://www.daniweb.com/forums/thread11049.html

mfg,
bytepool
 
Zuletzt bearbeitet:
Wer hat denn davon gesprochen, die Zahl in einen String umzuwandeln?
 
Der TE:

ich brauch aber die ganze 3 stellige zahl in einem char (unsigned)... :(

Ich meinte einen Null terminierten String, kein Objekt der Klasse string.

edit:
Denn wenn der TE meinte, er haette die Zahl gerne als byte, dann koennte man das ja auch einfach casten... Aber vielleicht habe ich das auch missverstanden.

mfg,
bytepool
 
Also danke für die Hilfe!
hab es heute hinbekommen! hatte wie schon gedacht was mit den pointern verwechselt (* statt &).. naja..
und die ints hab ich einfach gecastet ;)
 

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

[SUSE 10.2] lvm-volume nicht mountbar

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

Externe Medien nicht mountbar

Zurück
Oben