Hallo
Also mein Programm ruft in jedem Durchlauf ein externes
Programm über eine batch-Datei auf. Dieses Programm schreibt
seine Ergebnisse in eine Textdatei. Die Ergebnisse, welche in
der Textdatei stehen möchte ich nach der Ausführung der
BatchDatei mit meinem C++ Programm einlesen.
Die Ergebnisse sehen z.B. folgendermassen aus:
0 476 TL 0.234
\\
0 500 TL -413
\\
0 500 TR -5432
\\
usw…
Also in der ersten Zeile ist nach 0, 476, TL ein Leerzeichen.
Hier möchte ich Trennen und sozusagen einzeln auf die WErte
zugreifen können.
…
So wie ich dein Programm verstanden habe, schreibst du die
Zeilen „nur“ in „schreiben“.
Nee, das Programm liest Deine Datei in ein Array (von strings) ein
- Zeile: schreiben[0][0], schreiben[0][1], schreiben[0][2], schreiben[0][2]
- Zeile: schreiben[1][0], schreiben[1][1], schreiben[1][2], schreiben[1][2]
usw.
Allerdings kenne ich mich mit Iteratoren nicht aus, auch lesen
in C++ Handbüchern hat da bis jetzt nicht viel geholfen.
Habe denke ich alles verstanden außer die entscheidende Zeile:
vector vs((istream_iterator(is)),
istream_iterator());
Das nimmt einen string, also „0 500 TL -413“, welcher in ‚is‘
steht und zerhackt ihn an den Leerzeichen, die einzelnen
kleinen strings, die dabei abfallen, finden sich in vs[0] … vs[3]
wieder. Es ist eine Initialisierung eines -Typs über
einen sog. Input-Iterator auf einem Feld des selben Typs.
Eine reine C - Lösung sähe etwa so aus:
#include
#include
typedef struct {
int s1; /\* int fuer 1. Spalte \*/
int s2; /\* int fuer 2. Spalte \*/
char s3[8]; /\* char[8] fuer 3. Spalte =\> max. 8 Zeichen \*/
double s4; /\* Gleitkomma fuer 4. Spalte \*/
} WERTE;
int read\_from(char \*filename, WERTE \*\*ppWerte)
{
int nlines = 0;
long flen;
char puffer[1024];
FILE\* datei = fopen("datei.dat","rt");
WERTE \*pw;
fseek(datei, 0L, SEEK\_END);
flen = ftell(datei);
fseek(datei, 0L, SEEK\_SET);
// Aus Dateilaenge auf Anzahl der Elemente schliessen
// (might be optimized ...)
\*ppWerte = pw = (WERTE \*)malloc(flen/9\*sizeof(WERTE));
while(fgets(puffer, sizeof(puffer), datei) != 0)
if(sscanf(puffer, "%d %d %s %lf",
&pw-\>s1, &pw-\>s2, pw-\>s3, &pw-\>s4) == 4) {
++nlines;
++pw;
}
fclose(datei);
return nlines;
}
void print\_all(WERTE\* werte, int nWerte)
{
int zeile;
for(zeile=0; zeile
Grüße
CMБ