Datei öffnen und in dynamisches Array einlesen
-
Wie? Muss ich erst mal eine Datei per
fstreamöffnen und danach per Schleife in dyn. Array einlesen?
-
Im Prinzip ja, mehr kann ich aufgrund deiner ungenauen Fragestellung nicht sagen. Wobei das ganze sehr komfortabel geht, wenn du
std::vector<std::string>verwendest, dann musst du dich nämlich nicht um die Speicherverwaltung kümmern und kannst dich auf das Wesentliche konzentrieren.
-
#include <fstream> #include <vector> // besser ein std::vector als ein Array #include <string> /* ... */ // Datei öffnen std::ifstream file_in("test.txt"); if(!file_in) { std::cerr << "Datei wurde nicht gefunden." << std::endl; return 1; } /* ... */ // z. B. Wörter einzeln einlesen std::string text; std::vector<std::string> wortweise; while(file_in >> text) { wortweise.push_back(text); } /* ... */ // Oder zeilenweise std::vector<std::string> zeilenweise; while(std::getline(file_in, text)) { zeilenweise.push_back(text); }Wenn es aber zwingend ein dynamisches Array sein soll, dann wird dir sicherlich der Beispielcode der folgenden Seite auf die Sprünge helfen können:
http://www.cplusplus.com/reference/iostream/istream/seekg/
-
Mizar schrieb:
#include <fstream> #include <vector> // besser ein std::vector als ein Array #include <string> /* ... */ // Datei öffnen std::ifstream file_in("test.txt"); if(!file_in) { std::cerr << "Datei wurde nicht gefunden." << std::endl; return 1; } /* ... */ // z. B. Wörter einzeln einlesen std::string text; std::vector<std::string> wortweise; while(file_in >> text) { wortweise.push_back(text); } /* ... */ // Oder zeilenweise std::vector<std::string> zeilenweise; while(std::getline(file_in, text)) { zeilenweise.push_back(text); }Wenn es aber zwingend ein dynamisches Array sein soll, dann wird dir sicherlich der Beispielcode der folgenden Seite auf die Sprünge helfen können:
http://www.cplusplus.com/reference/iostream/istream/seekg/Danke dafür, und wie mache ich das, wenn ich keine .txt sondern ne binäre Datei einlesen möcht?
-
skullyan schrieb:
Danke dafür, und wie mache ich das, wenn ich keine .txt sondern ne binäre Datei einlesen möcht?
Dann öffnest du die Datei mit dem flag ios::binary. Als Container willst du dann wahrscheinlich etwas nehmen, das chars hält. Ansonsten ist es ziemlich ähnlich. Man kann das Ganze übrigens auch sehr elegant und allgemein anwendbar machen indem man einen istream_iterator und std::copy verwendet, aber du solltest dir vielleicht erstmal die etwas leichter zu verstehende Variante die hier vorgeschlagen wurde angucken.
-
Hallo Leute!
Ich brauche dringend eure Hilfe. Bin ganz neu hier und weiß auch nicht ob ich hier richtig bin. Also zu meinem Problem:Ich habe eine txt-Datei mit folgenden Daten: 23 41 fd 2b 45 ..... (sollen hex-daten sein) Jetzt möchte ich diese in ein Array einlesen als binär. Also dass praktisch in jedem Array-Feld [0010 0011] [0100 0001]... Geht das? Und wenn ja wie (MFC, C++) ? Bitte helft mir. Ich danke euch.
-
-
Danke dir für den Link, aber schon beim einlesen hab ich probleme. Er ließt mir die daten als string ein. Ich möchte aber dass er sie mir in ein Array byteweise einliest. Wie kann ich das umsetzen?
-
-
Also ich habe das jetzt mit fstream.h versucht aber der compiler kennt das nicht. liegt das vielleicht daran , dass ich keine Konsolenanwendung habe sondern eine mfc dialoganwendung?
-
Sorry, geht doch.
-
Also jetzt liest er mir zeichen einzeln ein. Kann ich nicht die Daten so einlesen dass er sie mir als byte Hexadezimal einliest?
-
lenchen schrieb:
Also jetzt liest er mir zeichen einzeln ein. Kann ich nicht die Daten so einlesen dass er sie mir als byte Hexadezimal einliest?
ifstream inputfile; [...Datei öffnen...] int beispiel; inputfile >> hex >> beispiel;
-
Danke dir seppJ .
Aber das habe ich auch schon probiert.
Vielleicht habe ich mein Problem nicht so gut beschrieben.
Ich habe also daten in einer txt dateigepeichert: 34 12 43 fb cf...
Ich würde diese gerne so einlesen, dass er mir diese als hex bytewiese versteht, also dass ich prktisch ein array habe und in jeder feldkomponente [34][12][43][fb]... steht. Ist das so möglcih? Und wenn ja wie? Ich suche schon ewig aber ich finde nichts.
Danke euch.
-
Alles ist möglich! Ich kapiere nur nicht, was du überhaupt willst. Wie man hexadezimale Zahlen einliest wurde dir gezeigt, aber das willst du anscheinend nicht. Wie man Zeichen einliest wurde wurde dir gezeigt, aber das willst du anscheinend nicht. Also: Was willst du?
-
also wie gesagt ich habe zeichen gespeichert z.b 234f3c
und ich möchte dass diese mir als hex interpretiert werden. Nicht dass mir zu der 2 der ascii code umgerechnet wird, sondern dass die 23 zusammen als hexzahl erkannt wird, also als 35(dez), also immer zwei zahlen zusammen eingelesen werden. Ich hoffe dass es mir gelungen ist das jetzt besser zu erklären.
-
Ahh, dein Problem ist also, dass keine Trennzeichen zwischen den Zahlen stehen. Das ging vorher nicht richtig hervor, da du immer so schöne getrennte Listen als Beispiel gegeben hast, die eigentlich optimal für istream::operator >> gewesen wären.
In diesem Fall (ungetestet, aber Prinzip sollte funktionieren):
stringstream str; // Stringstream, damit später die stream Operatoren verwendet werden können. char buffer[2]; // Puffer für zwei Zeichen inputfile.read(buffer,2); // Zwei zeichen lesen... str.write(buffer,2); // Und in den stringstream schreiben int hexwert; str >> hex >> hexwert; // Und als Abschluss die Zeichen als Hexzahl aus dem Stream lesenDas Ganze verpackst du in eine Schleife und machst noch ein paar Prüfungen dazu, wann deine Datei zu Ende ist und schreibst die extrahierten Hexwerte dann in dein Array.
-
doch ich hatte leerzeichen dazwischen, aber die hat er mir auch als zeichen interpretiert und ich habe die weggemacht, weil ich dachte dass es vorteilhafter wäre.
Danke werde es gleich mal ausprobieren
-
stringstream will der nicht erkennen
-
Ich flippe aus!!!!
Ich danke dir SeppJ. Genau das habe ich gesucht!!!
DANKE DANKE DANKE
Es geht!!!