String in einem Array speichern

untread

Erfahrenes Mitglied
Hallo, und zwar möchte ich jede Zeile extra in einer Variable speichern.
Nun weiß ich jedoch nicht wie ich das anstellen soll, da char ja immer nur einen Charackter nimmt und bei diesem Code klarerweiße ne Fehlermeldung

Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CString' akzeptiert (oder keine geeignete Konvertierung moeglich)


Code:
CStdioFile file("datei.txt",CFile::modeRead); 

    CString temp = _T(""); 
    CString str = _T("");  
	char zeilen[100] = "";
	int i=0;

   
    while(file.ReadString(temp) != NULL) 
    {
		str += temp + "\r\n"; //hängt ein Zeilenende an den String
		  
		
		  zeilen[i] = temp;
		  i++;

    }
    
    
    file.Close();


mfg Harry
 
Hi,
ich bin nicht so der Fan von statischen char-Feldern...
Wozu brauchst du die denn unbedingt?

Mal davon abgesehen, verstehe deinen Code nicht...

und zwar möchte ich jede Zeile extra in einer Variable speichern.
Du hast aber nur eine Variable, nämlich dein Feld mit jeweils einer char?

Was willst du denn genau machen?

Grüße Squeegee

PS.: Da fällt mir ein, könnte deine Lösung ein CArray oder eine CList sein?
 
Zuletzt bearbeitet:
Haha, jetzt hab ich deinen anderen Post nochmal gesehen,
ich glaub ich weiß jetzt was du willst...


Code:
const char* ptemp=NULL;
ptemp = (LPCTSTR) temp;
zeilen[i] = atoi(ptemp);


Trick ist die Methode atoi, die einen String in Zahlen wandelt.
Hab den Code grad frei hingeschrieben, ich hoffe, es sind keine Fehler drin...


Gruß Squeegee
 
dankeschön ,mit Zahlen funktionierts, mit "Wörtern" jedoch nicht (wäre interessant zu wissen ob das auch geht)

Ja die Sache ist die, ich bekommen von einem EEPROM Daten die ich mit einem FTDI Chip sende bzw. lese und die sollen dann in eine Textdatei geschrieben werden.

Dazu gibt es ein Auswertungsprogramm, welches mir dann diese Werte in einem Diagramm darstellt.

Also das sind mal die ersten Annäherungsschritte im Endeffekt stehen dann in der Textdatei die Zahlen nicht nur untereinandern sondern beinhaltet eine Zeile mehrere Messwerte ( z.B. Datum,Zeit|Temperatur|Luftdruck|Lichtstärke) und die sollten dann auch noch per Trennzeichen abgesonderd eingelesen werden.

Gibts da ne simple Möglichkeit dazu?

mfG Harry
 
Hi Harry,
mit Wörtern geht das natürlich nicht (atoi wandelt den Text ja in eine Zahl), aber Wörter würde ich wie gesagt auch eher einfach in dem CString lassen...
Du hast also ein ASCII-File, in dem pro Zeile mehrere Messwerte und Text stehen.
Da das File ja ein spezielles Format hat, fällt mir nix besseres ein, als einen Parser zu schreiben, der dir jede Zeile richtig interpretiert.

Beispielsweise:

Temperatur=200, Zeit=1112,....
Dann musst du (am besten mittels einer Lookup-Tabelle) diese Zeile auf Keywörter untersuchen, zb.: auf das Keywort "Temperatur=". Dann musst du ermitteln, an welcher Position das "=" ist und von da aus soundsoviele Zeichen nach rechts hin einlesen und auswerten.
Wenn du das Textfile selbst beeinflussen kannst, überleg dir ne sinnvolle Struktur der Daten (über mehrere Zeilen), die das einlesen erleichtert.

Das ist allerdings ein wenig ein Gefiesel, hab ich vor kurzem auch gemacht, hatte allerdings pro Zeile nur einen Wert, das vereinfacht die Sache.
Schau dir die Klasse CList als Lookup-Table mal genauer an. CString bietet mehrere Methoden, die einem die Arbeit bei sowas auch erleichtern.


Gruß Squeegee
 
Zuletzt bearbeitet:
Hi,
wenn jede Zeile genau die gleichen Variablen in der gleichen Reihenfolge enthält, nur mit unterschiedlichen Werten, würde ich eine eigene Klasse dafür definieren, und dann die einzelnen Datensätze in einem CObArray speichern. Das ist die einfachste Möglichkeit. Wenn allerdings die Zeilen unterschiedliche Variable enthalten, bleibt dir nur die Methode mit dem Parser, siehe Post von SqueeGee.

Mfg

langer
 
danke werde mal schaun wie ich das am besten lösen kann
Naja wenn ich CString zeilen [ i ] schreibe ..also einen CString als Array definieren, geht das nicht, aber egal

mfg Harry
 
Zuletzt bearbeitet:
Hi,
und dann mach ich für heute Feierabend *g*
nicht CString zeilen[ i ], das geht so nicht. Manches must du in der MFC ein wenig anders angehen also sonst, also hier der vollständige Code:

CArray<CString, CString> zeilen;

Glaub mir! Viel toller!

Grüße und einen schönen Feierabend
Squeegee
 
Zurück