Im Programm möchte ich zeilenweise Text aus einer Textdatei einlesen und Daten aus jeder Zeile extrahieren. Jede Zeile in der Textdatei enthält einen Buchstaben wie "A", gefolgt von einem Doppelpunkt ":" gefolgt von einer Ganzzahl wie "2". Die Funktion in dem Programm, das in den Daten sieht derzeit wie folgt lauten:Einlesen von Daten aus einer Textdatei und Trennen der Daten in jeder Zeile
void readFile()
{
std::ifstream aFile;
std::string alldata;
std::string letter;
aFile.open("KeyPopularity.txt");
while (std::getline(aFile, alldata))
{
letter = alldata[0];
for (int i = 0; i < keyboardKeys.size(); i++)
{
if (keyboardKeys[i].character==letter)
{
keyboardKeys[i].noOfPresses = int(alldata[2]);
}
std::cout << letter << " ";
std::cout << int(alldata[2]) << "\n";
}
}
aFile.clear();
}
jedoch die alldata Variable an Position 0 (alldata [0]) statt Auflistung nur ein einzelnes Zeichen dh dem Buchstaben listet eine Reihe solcher wie 87 vor dem Brief z. 87 W im Gegensatz zu nur W. Die Frage ist, warum passiert das und gibt es eine Möglichkeit, die Daten aus jeder Zeile in der Textdatei Zeile für Zeile zu extrahieren, um den Buchstaben an der Position 0 einer Zeile und die Nummer an der Position zu erhalten 2 der Zeile?
Eine weitere Beobachtung: wenn die Anzahl der Pressen Lesen Sie aus der Datei ist größer als 9, dann wird der obige Code nicht funktionieren, da es nur die erste Ziffer liest. Sie können den Code so anpassen, dass er die ersten beiden Zeichen von alldata (also den Schlüssel und das ':') entfernt. Sie können dies mit alldata.erase (0, 2) tun. Dann können Sie die resultierende Zeichenfolge konvertieren eine Ganzzahl mit keyboardKeys [i] .noOfPresses = stoi (alldata); Stoi ist jedoch nur in C++ 11 verfügbar, für ältere C++ können Sie das gute alte [atol] (http://www.cplusplus.com/reference/cstdlib/atol/) von stdlib.h verwenden –