christianwaltjen
Goto Top

Read txt-file

Hy.
Ich versuche gerade ein txt-file auszulesen und habe mir zu Testzwecken ein comandozeilen-Programm geschrieben.
Allerdings bekomme ich nicht das Ergebniss, das ich erwahrtet habe.

Im Moment möchte ich einfach nur das File auslesen und die Namen ausgeben.
Vielleicht kann mir ja irgendwer weiterhelfen.

Das File das ich auslesen möchte sieht wie folgt aus:

P-Render01
P-Render02
P-Render03
P-Render04
P-Render05
P-Render06
P-Render07

Das ist mein Code:

#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <fstream>
#include <afxcoll.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv)
{
CStringArray rechnerNames;
int RechnerCounter = 0;
char inWord[20];
ifstream inFile;
inFile.open("RechnerFile.txt");
if (!inFile){
return 1;
}
while (inFile >> inWord){
rechnerNames.Add( inWord );
cout << *rechnerNames[RechnerCounter] << endl;
RechnerCounter++;
}
inFile.close();
rechnerNames.FreeExtra();
return 0;
}

Falscher output im Moment:
80
80
80
80
...


Vielen Dank im vorraus:
ChristianWaltjen

Content-Key: 32298

Url: https://administrator.de/contentid/32298

Printed on: April 16, 2024 at 16:04 o'clock

Member: GreyFox
GreyFox Sep 13, 2006 at 14:16:58 (UTC)
Goto Top
Probiere es mal stat *rechnerNames[RechnerCounter]
rechnerNames.GetAt[RechnerCounter]
STL halt ^^

Beim Rest sehe ich eigentlich keine Probleme ...
Member: ChristianWaltjen
ChristianWaltjen Sep 14, 2006 at 10:04:57 (UTC)
Goto Top
Hallo GreyFox,
erstmal Danke für den Tip.

Ich habe jetzt die Zeile:
cout << *rechnerNames[RechnerCounter] << endl;
durch
cout << rechnerNames.GetAt(RechnerCounter) << endl;
ersetzt

Und bekomme jetzt:

00435818
0043B2F0
0043B500
0043B558
0043B5B0
...

Aber nicht die Namen aus der Datei, obwohl diese korrekt in inWord abgelegt werden.
Member: ChristianWaltjen
ChristianWaltjen Sep 14, 2006 at 10:30:00 (UTC)
Goto Top
Für mich sieht das so aus, als ob die Convertierung von char[20] nach CString nicht einwandfrei ist und die Adresse von ersten zeichen gespeichert wird.
Member: GreyFox
GreyFox Sep 14, 2006 at 14:33:01 (UTC)
Goto Top
dann entweder per Typecast sprich (LPCSTR) oder per GetBuffer oder per per Format und und und
Aber eigentlich ist die Konvertierung von Char zu CString nahtlos ...

Tatsache ist ...
00435818
0043B2F0
0043B500
0043B558
0043B5B0
das sind wirklich Adressen
0043B500
0043B558
Das sind 11 Byte abstand ... d.h. 10 Byte Zeichen Plus Terminierung ... CString brauch wahrscheinlich einen char Pointer ^^
Member: ChristianWaltjen
ChristianWaltjen Sep 15, 2006 at 10:57:28 (UTC)
Goto Top
Also ich habe jetzt 'SetAtGrow' benutzt das ganze Debugged (dummes neudeutsch).
Der Name scheint ordungsgemäss in dem CStringArray gespeichert zu werden:

http://www.puppeteers.de/kunden/Christian/DeBug.jpg

GetData ist natürlich nicht richtig.

Fragt sich jetzt nur noch wie ich an den Namen komme.
Ich bekomme nämlich immernoch die Adresse des ersten Zeichens.

Output:

00435df8
Member: ChristianWaltjen
ChristianWaltjen Sep 15, 2006 at 11:34:49 (UTC)
Goto Top
So Ich hab jetzt die convertierungen voneinander getrennt. Und alles Debuggt
Jetzt sieht der Code aus wie folgt:

...
while (inFile >> inWord){
rechnerNames.SetAtGrow( RechnerCounter, inWord );
CString outElement = rechnerNames[RechnerCounter];
cout << outElement << endl; # 'outElement' enthällt laut Debugger: "P-Render01"
RechnerCounter++;
}
...

Output:
00435DF8

Also langsam verstehe ich es nicht mehr.