Help...CString Array umwandeln int...
-
Hallöchen.Bin ganz neu hier

So kommen wir mal zu meinem Problem.
Ich soll im mfc nen programm schreiben das eine datei öffnet.
in dem fall soll es eine .txt datei sein.
Die Datei sieht so ca aus.
21grad;
22grad;
33grad;
usw.
ich soll die datei in einem editcontrol auslesen lassen.da klappt auch.
dann soll ich die werte umwandeln in int ...so das nur die zahlen da sind und das in einem anderen editcontrol anzeigen.mit einem seperaten button.
problem wie mache ich das???mein code sieht so aus
void CTempDlg::OnBnClickedButton1()
{
CFileDialog dialog(true,"txt","Datei",NULL,"Eigene-Dateien|.txt|Alle Dateien|.*||");
if (dialog.DoModal() == IDCANCEL)
{
return;
}ifstream Dat(dialog.GetPathName());
if(!Dat.good())
{
MessageBox("Fehler beim laden:"+edit1);
return;
}char Zeile[200];
edit1="";
int count = 0;
while (!Dat.eof())
{
if(count !=0)
{
edit1 += "\r\n";
}
Dat.getline(Zeile,sizeof(Zeile));
edit1 +=Zeile;
count++;}
UpdateData(FALSE);
ach und die aufgabe von meiner lehrerin sah so aus :
In einer Textdatei stehen in jeder Zeile eine Temperatur, insgesamt 24 (Für jede Stunde eine)
Die Datei kann man sich mit dem FileDialog aussuchen, die Daten laden und anzeigen (Listenfeld, oder EditControl).
Zum Auswerten muss man den Text in Zahlen umwandeln.
Dann wird ausgewertet: Maximum, Minimum, Durchschnitt. Die Ergebnisse werden angezeigt und in einer Datei gespeichert.
-
ist eigendlich gar nicht sooo schwer.
entweder du machst es über CString mit den funktionen GetLenght(), Right, Left bzw. ReverseFind.
oder aber du klapperst jedes zeichen einzeln ab mit isalpha zum schluß wenn du es ganz gut machen willst bräuchtest du noch atoi das wandelt dir einen String Zahl in einen integer.
zu CString:
wenn du die datei zeilenweise ausliest steht in dem zeilenstring 33grad. da grad in jedem zeilenstring vorkommt kannst du danach suchen. such von hinten her das g von grad mit ReverseFind, dir wird, wenn ich es noch richtig im kopf hab, eine 2 zurück gegeben. jetzt nimmst du Left und holst die stringzahl aus dem zeilenstring, darin sollte sich dann 33 befinden. mit atio kannst du dann diese zahl in einen integer verwandeln.zu isalpha:
isalpha prüft ein einzelnen zeichen, ob dieses zum alphabet gehört. somit wärst du nicht abhängig von grad. hiermit must du dir ne schleife aufbauen. Hol dir die länge des zeilenstrings mit GetLength. somit schießt deine schleife nicht über das ende des strings. prüfe einfach mitif(!isalpha(string[i])ob das zeichen zum alphabet gehört. wenn nicht kannst du es ja ganz leicht mittels des CString operator += zu einem neuen string hinzufügen. nach 33 würde dir kein weiters zeichen zum neuen string hinzugefügt.
somit sind wir dann wieder bei atoi. string in zahl wandeln.
-
noch ne Anmerkung, bei CString gibt es noch Replace() damit kann man einen Text durch einen anderen ersetzen. Wenn man sich das zu nutze macht, das man auch als den zu erstzenden String auch Null übergeben kann, is das wie ein Delet, nur mit einem definierten Text
deinCString.Replace("grad;", NULL); int Number = atoi(DeinCString);und als alternative zu isalpha für Zeichen gibt es noch
int isdigit( int ch );für alle Zahlen von 0 - 9.
So jetzt sollte das machbar sein,mit all den Infos

-
Wenn die Zahlen am Anfang stehen, kannst Du einfach atoi nehmen. Die Funktion stoppt an der ersten nicht-Zahl.