Textfile einlesen und auswerten.
-
Wenn es möglich ist würde ich gerne auf den Vektor verzichten. Dürfen wir wie immer nicht verwenden... leider.
Dazu ist ja das Problem das es erstmal ein Array ist wo die int und char Werte gemischt sind. Wenn ich ein Char Array benutze speichert er ja nur die ASCII Werte.
-
Tyle schrieb:
Dazu ist ja das Problem das es erstmal ein Array ist wo die int und char Werte gemischt sind. Wenn ich ein Char Array benutze speichert er ja nur die ASCII Werte.
Also sind es keine Zahlen, sondern strings?
-
Tyle schrieb:
Wenn es möglich ist würde ich gerne auf den Vektor verzichten. Dürfen wir wie immer nicht verwenden... leider.
Hmm, egal ich poste es trotzdem.
template<typename T> class vector_2d { private: vector<T> data; size_t sy; public: vector_2d( size_t y ) : sy(y) {} const T& operator()( size_t x, size_t y ) const { return data[x*xy + y]; } T& operator()( size_t x, size_t y ) { return data[x*sy + y]; } void push_back( const T& val ) { data.push_back(val); } size_t size_x() const { return data.size()/sy; } size_t size_y() const { return sy; } }; int main() { ifstream file( "test.txt" ); vector_2d<string> data( 2 ); for(string s1,s2; file>>s1>>s2; data.push_back(s1),data.push_back(s2)); for(unsigned x=0; x!=data.size_x(); ++x) { for(unsigned y=0; y!=data.size_y(); ++y) cout << data(x,y) << ' '; cout << '\n'; } }Tyle schrieb:
Dazu ist ja das Problem das es erstmal ein Array ist wo die int und char Werte gemischt sind.
Das Problem hast du gut erkannt. Da ein Array eine aufeinanderfolgende Ansammlung von Elementen desselben Types ist, hast du ein Problem.
-
Ich kann doch ein char Array abfragen in dem ja die ASCII Werte abgespeichert sind.
Bei G und F kommt ja dann 70 und 71 bei rum. Nur wie kann ich die zusammenhängende Zahlen z.B. 12 auswerten?
Die stehen ja nicht zusammen in einem Array Feld.
-
Tyle schrieb:
Nur wie kann ich die zusammenhängende Zahlen z.B. 12 auswerten?
Einfach ins Dezimalsystem umrechnen: 2*10^0 + 1*10^1
-
Also müsste ich mit zwei Array arbeiten.
Zu aller erst müsste ich die Zeichenkette auswerten. D.h. das Array immer bis zur nächsten 70 oder 71 durchlaufen und gucken ob davor ein oder zwei Werte gespeichert sind. Die dann Umrechnen und in ein neues int Array schreiben.
Wenn 70 oder 71 gelesen wird wird dann in ein bool Array true oder false eingetragen.
Dann könnte ich beide Arrays mit einem Wert durchlaufen z.B. i und mir für die Zahl den Zugehörigen Wert (true oder false) ausgeben lassen.
Ist alles ne bissel umständlich, frage mich nicht ob das nicht ein wenig einfacher geht. Mischen kann ich ja die Typen in einem Array nicht.
-
Hier, so darfst du es aber machen oder?
int main() { ifstream file( "test.txt" ); int daten[100][2] = {}; unsigned datensaetze = 0; for(unsigned x=0; x!=100 && file; ++x) { int zahl; file >> zahl; int zahl2; file >> zahl2; char c; if( file ) { c = zahl2; } else { file.clear(); file >> c; } if( file ) { daten[x][0] = zahl; daten[x][1] = c; ++datensaetze; } } // Testausgaben for(unsigned x=0; x!=datensaetze; ++x) { for(unsigned y=0; y!=2; ++y) cout << daten[x][y] << ' '; cout << '\n'; } }
-
Ja das kann ich so anwenden, ist erlaubt.
-
Tyle schrieb:
Ist alles ne bissel umständlich, frage mich nicht ob das nicht ein wenig einfacher geht. Mischen kann ich ja die Typen in einem Array nicht.
Sorry, vielleicht bin ich ja ein wenig begriffstutzig, aber:
was hast Du jetzt (logisch) in der Datei stehen? Zahlen? Oder Zeichenketten? Oder beides? Oder was anderes?Und was willst Du am Ende haben? Zahlen? Oder Zeichenketten? Oder beides? Oder was anderes?
-
Ich lese die Text-Datei als int array ein. Nach der Methode von OUT.
Ich möchte auch int Werte haben. Dann gucke ich welchen Wert die 2. Dimension hat, ob es 70 oder 71 ist.
So kann ich das Array durchlaufen.
Es geht im Endeffekt um eine Platz Resvervierung. Die 1. Dimension gibt die Personennummer wieder, die 2. ob die Person am Fenster oder am Gang sitzen möchte.
Ich überprüfe damit ein 3.Dim Array, ob der Platz noch frei ist. Wenn ja wird er reserviert, wenn nicht wird geguckt ob es noch einen anderen Fensterplatz/ Gangplatz gibt.
Das Textfile konnte ich nun einlesen und in ein 2. Dim Array verpacken. Soweit habe ich das was ich brauche.
Nun muss ich den Rest der Logik schreiben, d.h. das 3. Dim-Array durchlaufen.
-
Huh?
Aus der Beschreibung werde ich nicht schlau.Erzähl doch mal, was Du machen willst, nicht wie.
Ich verstehe Du hast eine Datei mit Reservierungen.
Jede Reservierung besteht aus einer Zeile mit einer ID in der ersten Spalte und einem Code für Gang('G'), oder Fenster('F') in der zweiten.
Was ist dann die Bedeutung der Zeile5 2aus Deinem Beispiel?
Du bist jedenfalls ganz schön auf dem Holzweg, so viel ist sicher.
-
Tyle schrieb:
Wenn es möglich ist würde ich gerne auf den Vektor verzichten. Dürfen wir wie immer nicht verwenden... leider.
Von dem, der Dir das verbietet, lernst Du alles Mögliche, aber kein C++
siehe dort