ERLEDIGT
NEIN
NEIN
ANTWORTEN
24
24
ZUGRIFFE
823
823
EMPFEHLEN
-
Huhu,
bin leider noch ganz frisch was Programmieren angeht, muss es vom Studium aus leider lernen
Ziel ist es eine Textdatei mit Werten einzulesen, danach diverese Berechnungen auszuführen und die Ergebnisse in einer neuen Textdatei ausgeben.
Nun bastel sich seit Montag ununterbrochen, die Berechnungen sind fertig, es hapert aber am einlesen...
Derzeit sieht es so aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#include <iostream> #include <fstream> #include "Einlesen.h" using namespace std; void Einlesen::einlesen() { ifstream datei1; datei1.open("C:\\temp\\punkte.txt"); if(!datei1.is_open()) { cout << "Datei nicht gefunden" << endl; } else{ while(!datei1.eof()){ datei1.getline(Buffer, 250); cout << Buffer << endl; } datei1.close(); } }
Funktioniert auch toll, er liest Zeile für Zeile ein und wirft sie wieder aus, da war ich schon glücklich.
Bis ich mich gefragt habe wie ich das jetzt in meine Rechnungen reinbekomme.
Angenommen ich lese in Zeile 1 eine 135 ein, da sieht mein Buffer so aus:
Buffer[0] = 1
Buffer[1] = 3
Buffer[2] = 5
aber wie mache ich daraus jetzt in int oder double um damit rechnen zu können ? Geht das überhaupt ?
Oder war die ganze Einlesesache die ich da mühselig erarbeitet hab sinnfrei ?
Hoffe jmd kann mir helfen
lg
-
Hallo Lara!
Da gibt es grundsätzlich mehrere Möglichkeiten, hier mal 2 davon:
Code :1 2 3 4
dateil.getline(Buffer, 250); std::istringstream instrstrm(Buffer); int ival = 0; instrstrm >> ival;
Damit wird versucht den Anfang von Buffer in einen int-Wert umzuwandeln.
http://www.cplusplus.com/reference/i...istringstream/
Eine weitere Möglichkeit ist sscanf. Dies ist jedoch eher aus C-Zeiten.
Code :1 2 3
... int ival = 0; sscanf(Buffer.c_str(), "%u", &ival);
http://www.cplusplus.com/reference/c...cstdio/sscanf/
-
Werd das mal probieren und meld mich dann wieder wies aussieht.
Erstmal vielen Dank dafür
-
So, also das Problem was ich jetzt hatte war das mein Buffer ein char array war und er nie in der Lage war char in int zu konvertieren.
Also musste ein string her. Letzten Endes habe ich jetzt eine string Variable buffer und ein int array zeile[250].
Das schaut nun so aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#include <iostream> #include <fstream> #include <sstream> #include "Einlesen.h" using namespace std; void Einlesen::einlesen() { fstream datei1("C:\\temp\\punkte.txt"); int i = 0; while(datei1.good()){ stringstream sstr; getline(datei1, buffer); sstr << buffer; sstr >> zeile[i]; i++; } datei1.close(); }
Klappt soweit auch, in dem Arry steht dann in jedem Feld eine Zahl.
Die nächste Hürde sind nun aber Kommazahlen. Wenn ich aus dem int Array einfach ein double Array mache, geht es aber nicht. Im string steht zwar noch die Kommazahl aber nach dem konvertieren schneidet er den Nachkommeanteil ab. Im Array steht dann nicht mehr 22,73 sondern nur noch 22,00000000000000000.
Wie konvertiere ich jetzt nach double ?
lg
Edit: Das scheint nicht am konvertieren zu liegen, ich kann allgemein keine Kommazahlen in ein Array eintragen. Ist das richtig ?Geändert von lara86 (29.05.09 um 13:09 Uhr)
-
Hallo,
in deinem letzten Post hast du 22,73 geschrieben.
"Kommazahlen" werden mit Punkt getrennt... also 22.73 ...
Vielleicht liegts ja daran.
MfG Turri
-
Oh weh, das sind die Sachen die man nicht weiß wenn man sich erst seit ein paar Tagen damit rumschlägt.
Daran lags wirklich, nun gehts, vielen Dank
Eine Frage habe ich noch, ist es normal das er aus einer 22.31 im Array eine 22.3099999999 macht ?
-
Hallo,
das müsste nur ein "Anzeigefehler" sein.
Wenn du den Wert aus dem Array in einer neuen Double Variable speicherst,
und diese mal ausgibst, dann müsste die richtige Zahl rauskommen.
MfG Turri
-
29.05.09 13:36 #8
- Registriert seit
- Jun 2005
- Beiträge
- 7.983
Hi.Ja, das ist normal. Gleitkommazahlen (wie double und float) sind mit einer Ungenauigkeit behaftet. Üblicherweise gibt man nur gerundete Werte aus.
Übrigens solltest du niemals die .eof(), good() und .bad() Methoden in der Art und Weise verwenden wie du es getan hast. Man sollte den Erfolg der Leseoperation prüfen, und nicht einfach nur ob vorher alles OK war:
GrußCode cpp:1 2 3 4 5 6 7 8 9 10 11
string buf; while (getline(datei1, buf)) { istringstream iss(buf); if (iss >> zeile[i]) { // Alles OK. } else { // Error: konnte nicht in double konvertieren. } }
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Oh super, danke, werde ich direkt mal probieren
-
29.05.09 15:07 #10
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 412
Ich persoöhnlich bevorzuge fprintf und fscanf bei Textdateien kannst du dir ja acuh mal anschauen.
Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
29.05.09 15:17 #11
- Registriert seit
- Jun 2005
- Beiträge
- 7.983
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Jetzt ist noch eine Frage abseits des auslesens von Dateien aufgekommen, bei dem es um Objekte geht.
Angenommen ich habe 3 Klassen:
Klasse A
Klasse B
Klasse C
Klasse C besteht nur aus 5 private Variablen und jeweils 5 public Getter- und Setter Methoden um darauf zugreifen zu können.
Klasse A erstellt sich jetzt ein Klasse C Objekt und trägt dort die eingelesenen Werte über die Settermethoden ein. Geht auch toll.
Jetzt kommt Klasse B, in der eigtl die Berechnung stattfinden soll, allerdings komm ich ja jetzt nicht mehr an die Werte dran. Wenn ich wieder ein neues Klasse C Objekt erstelle sind die Werte natürlich weg, aber ohne eines zu erstellen kennt er die GetterMethoden ja nicht.
Muss ich das Objekt aus Klasse A jetzt an Klasse B übergeben ? Oder kann man Methoden anderer Klassen auch aufrufen ohne ein Objekt davon zu erzeugen ?
-
30.05.09 14:15 #13
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 412
Du könntest Klasse C als friend-class zu Klasse B deklarieren und somit auf dir Privat variablen zugreifen, jedoch benutzt man dies heute eigentlich nichtmehr.
Du kannst dir doch in Klasse A eine Methode schreiben welche den Zeiger auf das Klasse C Objekt liefert und mit diesem in Klasse B arbeiten.
war das jetzt ironisch gemeint oder willst du mich aufn arm nehmen?Geändert von 3Cyb3r (30.05.09 um 14:19 Uhr)
Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
Okay, nun hab ich mich ne Weile mit Zeigern rumgeschlagen und es nun immerhin mal in Klasse A am laufen:
Code :1 2 3 4 5 6 7 8
void Einlesen::speichern(){ Punkte *newPunkte; newPunkte = new Punkte; newPunkte->setYA(zeile[0]); newPunkte->setXA(zeile[1]); newPunkte->setYE(zeile[2]); newPunkte->setXE(zeile[3]); }
Damit hab ich die Punkte jetzt in der anderen Klasse gesetzt.
Nun will ich aus einer dritten Klasse auf diese Punkte zugreifen. Kann ich den Zeiger dann in der dritten Klasse direkt verwenden ? Oder muss ich denn irgendwie übergeben ? Kann man den einfach als Parameter übergeben ? Kriegs nicht so richtig zum laufen
-
30.05.09 20:25 #15
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 412
Du schreibts dir eine Funktion die den Zeiger zutück gibt.
So wie des es allerding ejtzt gemacht hast wird es auch schlecht funktionieren.
[CPP]
class Einlesen{
private:
Punkte* Punkte;
// ......................
public:
Einlesen();
~Einlesen();
// ...................
};
//in der cpp datei
void Einlesen::speichern(){
Punkte= new Punkte;
Punkte->setYA(zeile[0]);
Punkte->setXA(zeile[1]);
Punkte->setYE(zeile[2]);
Punkte->setXE(zeile[3]);
}Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
Ähnliche Themen
-
textdateien verarbeiten!? ansatzfrage
Von maychu im Forum Linux & UnixAntworten: 3Letzter Beitrag: 12.03.10, 00:36 -
Textdateien einlesen String als Seperator
Von Krikus im Forum C/C++Antworten: 1Letzter Beitrag: 06.07.09, 17:30 -
BufferedReader: Einlesen von Textdateien in ein JPanel
Von bocee83 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 4Letzter Beitrag: 27.10.05, 19:30 -
bin auch am Verzweifeln...Textdateien einlesen
Von Guntpat1981 im Forum C/C++Antworten: 2Letzter Beitrag: 23.01.05, 13:17 -
Textdateien mit JAVA einlesen!
Von Panzer im Forum JavaAntworten: 7Letzter Beitrag: 06.01.04, 12:21





Zitieren


Login





