gets -> strtok -> werte sind strings und DWORDS
-
Hi,
ich habe folgendes Problem, ich lese Zeile für Zeile aus einer Datei
in jeder zeile steht ein string und mit semikolon dahinter ein DWORD.
jetzt will ich diese beiden werte in ein DWORD array und win characterarry einlesen. Die Problematik ist hier das ich wenn ich mit strtok arbeite um die passagen zwischen den semikolons zu lesen ein problem mit den DWORDs bekomme!
Ich kann einen Cast machen aber der funktioniert nicht wirklich...Wie macht man sowas? zeichen für zeichen lesen? oder wie?
Wäre für einen Lösungsansatz (auch wenn ich jetzt keinen code gezeigt habe dankbar...
-
Wenn ich dich richtig verstanden habe musst du die eingelesenen Werte noch in eine Zahl umwandeln. Du nimmst also den String in dem die eingelesene Zahl steht und wandelst sie z.B. mit atoi um. Da gibt es sicherlich noch bessere funktionen zu, die mir aber gerde nicht einfallen
-
Habe mal ein Beispiel geschrieben, wie man es machen koennte:
int main() { std::ifstream In("test.txt"); std::string Read; std::getline(In, Read); size_t Pos = Read.find(';'); char* MyChar = new char[Pos + 1]; ::strcpy(MyChar, Read.substr(0, Pos).c_str() ); unsigned long MyNumber = ::atoi( Read.substr(Pos + 1, Read.length()).c_str() ); std::cout << "String: " << MyChar << "\nDWORD: " << MyNumber << std::endl; delete [] MyChar; std::cin.get(); return 0; }
Text in test.txt z.B.: ich bin ein string;15923
Ausgabe: "String: ich bin ein string"
"DWORD: 15923"Willst du mehrere Datensaetze einlesen muss man das natuerlich noch modifizieren, aber das Prinzip sollte so klar werden. Du kannst auch std::stringstream nutzen, bringts in deinem Fall aber meiner Meinung nicht wirklich.
Und: keine Garantie auf Richtigkeit- hab jetzt nicht lange getestet, vllt sind noch paar kleine Fehler mit diversen Positionen oder aehnlichem.
Gruss,
DeSoVoDaMu
-
DeSoVoDaMu schrieb:
int main() { std::ifstream In("test.txt"); std::string Read; std::getline(In, Read); size_t Pos = Read.find(';'); char* MyChar = new char[Pos + 1]; ::strcpy(MyChar, Read.substr(0, Pos).c_str() ); unsigned long MyNumber = ::atoi( Read.substr(Pos + 1, Read.length()).c_str() ); std::cout << "String: " << MyChar << "\nDWORD: " << MyNumber << std::endl; delete [] MyChar; std::cin.get(); return 0; }
Etwas vereinfacht:
int main() { std::ifstream In("test.txt"); std::string Read; std::getline(In, Read); size_t Pos = Read.find(';'); std::cout << "String: " << Read.substr(0,Pos) << "\nDWORD: " << ::atoi(&Read.c_str()[Pos + 1]) << std::endl; std::cin.get(); return 0; }
-
Vielen Dank, das werde ich ausprobieren...
Gruß