C++ (fscanf)
Thorsten
- programmiertechnik
0 Marko0 Bernhard Peissl0 stw
Gruss am Morgen
gibt es einen C++ Kenner hier im Forum. Ich habe aus einem File das ca.
so aufgebaut war,
Date Wert1 Wert2 ...
1.99 34537 65778 ...
2.99 57678 78699 ...
check = 1;
for (i=0;;i++) {
check=fscanf(sf,"%s", string);
if (check==EOF) break;
if ((i%(NumOfColumns+1))==0) {
GetDate (string, Frequency, Date);...
die Werte (FELDER einzeln) als strings ausgelesen. Jetzt hab ich ein neues File
Date;Wert1;Wert2;...
1.99;45776;76887;...
2.99;65858986;98797;...
Wie kann ich das Programm schreiben, das es nicht die Leerzeichen als Ende bzw.
Anfang der strings erkennt, sondern die ";" SEMIKOLONS.
Danke und Gruß aus dem Schwabenlande
Thorsten
Hallo Thorsten,
gibt es einen C++ Kenner hier im Forum.
Hm, kenn mich eigentlich nicht besonders mit aus, kann es aber mal probieren.
Anfang der strings erkennt, sondern die ";" SEMIKOLONS.
Ich denke, Du musst Dir eine Funktion selber schreiben, die Zeichenweise in einer Schleife einliest, bis das Zeichen das Semikolon ist. Im übrigen verwendet man meines Wissens in C++ bevorzugt diese Stream Bibliotheken (fstream), das fscanf war in C üblich.
Gruss
Marko
Grüssi!
Date;Wert1;Wert2;...
1.99;45776;76887;...
2.99;65858986;98797;...
Wie kann ich das Programm schreiben, das es nicht die Leerzeichen als Ende bzw.
Anfang der strings erkennt, sondern die ";" SEMIKOLONS.
Du kannst die Datei zeilenweise einlesen (fgets) und dann bei ';' splitten (strtok):
FGETS:
while (fgets(line,sizeof(line),sf) != NULL) { [...] }
http://www.cplusplus.com/ref/cstdio/fgets.html
STRTOK:
for (p=strtok(line, SEPERATORS); p!=NULL; p=strtok(NULL,SEPERATORS)) { [...] }
http://www.cplusplus.com/ref/cstring/strtok.html
Da C++ schon ein paar Jährchen zurückliegt kann ich nix garantieren, und C liegt noch einige Jährchen mehr zurück ;-) Und da ich weder C noch C++ Compiler habe, hab ich es in php ausprobiert ;-)
<?
$string = "This;is;an;example;string";
$tok = strtok ($string,";");
// Hier wird der String gesplittet in "This" und "is;an;example;string"
while ($tok) { // solange es ein $tok gibt das != NULL ist
echo "Word=$tok<br>"; // beim ersten durchlauf: "This"
$tok = strtok (";"); // 1. Durchlauf: "is;an;example;string" wird gesplittet
// in "is" und "is;an;example;string"
// Beim 2. DL wird "is" ausgegeben, und der String weiter gesplittet
}
?>
In C/C++ gehts genauso. Wichtig ist nur, dass zweimal gesplittet wird!
lg bernhard
Hallo Thorsten,
Zeilenweise aus einer Datei lesen und das Semikolon als Begrenzer einsetzen ?
istream& getline( signed char* psch, int nCount, char delim = '\n' );
---------------------------------------------------------------^^
Den Rest kriegst Du allein hin.
Setze ifstream ein (erbt von istream die Methode).
Vergiß das "FILE". Da hat sich schon einiges getan ;)
ifstream myFile;
myFile.open(...);
...
viele Grüße
stw