Einlesen in Listbox

Tetsuya

Mitglied
Hallo
Ich hab ein kleines Problem eine Funktion von mir soll Strings aus einer txt- Datei in einer Listbox wieder geben von dem dann eines Selectiert wird. Die Funktion hat laut Kompiler keinen Fehler aber sie zeigt mir nichts an. Es sind zwar Zeilen vorhanden aber es ist keine Text da.
Ich weiss das Thema Listbox gab es öffter aber ich hab keine Ahnung was ich falsch mache.
Ich hoffe mir kann einer sagen oder wenigstens erklären warum die Fubktion das macht und nicht das was sie machen soll. :confused:

mein Quellkode:

CString szMB;
CString str;

FILE * stream;
szMB = "Messdat.txt";
stream=fopen(szMB,"r");
fscanf (stream,str);
while (str != "");
{

m_List1.AddString(str);
int selt = m_List1.GetCurSel(); ? //ist eine Membervariable und alc CListBox deklariert
neudat.szMB_01 = selt; ? //gehört zu einer Struktur und ist als CString deklariert

Ach ja ich hoffe ihr hattet fröhliche Ostern (War im Urlaub und hab gefeiert) :)

gruß Tetsuya
 
Irgendwie scheint der Code da nicht besonders komplett zu sein. Kannst du den nochmal richtig einfach copy/paste hier rein setzen?

Was ich sonst so sehe:

Das Semikolon hinter dem while gehört weg.
Das fscanf ist doch hoffentlich auch IN der while-Schleife drin? Sonst gibts immer nur die erste Zeile als Inhalt.

GetCurSel ohne vorher ein Item selektiert zu haben gibt CB_ERR zurück und hat mit ListBox füllen nix zu tun :)
 
Hi
Also hier ist der kommplette Quelkode der Funktion aber es sind auch einige Deklarationen in meiner Header-Datei und das ganze Programm ist etwas lang. (8Seiten Quelltext ohne den Quelltext der vom Compiler vorgegeben ist) und es reagiert nicht mehr wenn ein Button angeklick wird aber das behebe ich momentan schritt für schritt.
Ich hab es schon ein wenig mit deinen Vorschlägen verbessert und jetzt macht die Funktion nichts mehr.

Sie wird mit einem Button aufgerufen.

void CEditorDlg::OnSelchangem1()
{
CString szMB;
CString str;

FILE * stream;
szMB = "Messdat.txt";
stream=fopen(szMB,"r");

while (str != "")
{
fscanf (stream,str);
m_List1.AddString(str);
}
int selt = m_List1.GetCurSel();
neudat.szMB_01 = selt;
}
 
Ich hab das jetzt nicht in der neuen MSDN gefunden (ich verfluche sie) aber ich dächten, das man bei den ganzen "normalen" Dateioperationen mit FILE * kein CString verwenden darf - das führt zu keinem absturtz oder Fehlermeldung aber es ging einfach nicht - ganz fies ^__^.

Also probiers mal entweder mit CFile als Klasse oder mit char [] als Variable.

M.f.G. Erik
 
Tach
Aber beim reinschreiben in die txt-Datei hat das doch mit den CString auch funktioniert*kopfkratz*. Mit char hatte ich es am anfang auch gemacht da kamen aber immer Fehler meldungen.
Meine MSDN sagt mir garnichts weil das Mainboard von dem dämlichen Pc kaputt ist (Firmen Pc). Aber der ist insgesamt Fratze. (mit Hammer zerschlagen will) :rolleyes:

Ich verstehe das nicht was mach ich falsch (Brett vorm Kopf)
Könnt ihr mir nicht Helfen bevor ich ganz die kriese bekomme. *bettel*

gruß Tetsuya
 
fscanf und CString vertragen sich nicht. fscanf ist eine brutale Methode die mit impliziten Cast-operatoren nicht arbeiten kann.

Der folgende Code funktioniert:

Code:
  FILE * stream;
  stream=fopen("Messdat.txt","r");

  char    szTemp[512];

  while ( fscanf (stream,"%s",szTemp) != EOF )
  {
    m_List1.AddString(szTemp);
  }
  fclose( stream );

Achtung, in dem Fall darf eine Zeile nicht länger als 512 Zeichen sein!
 
Hey danke!
Jetzt bekomme ich immerhin Text in mein Feld aber er hört bei einem Klammerende auf zu schreiben und ich kann nicht scrollen und wieder verfluche ich den Pc das er keine Hilfe hat.
Kann mir da einer Helfen Und vielleicht kann mir einer Erklären warum er das macht dann kann ich auch ne Lösung selbst finden.

mfg Tetsuya
 
Tach
Also das Problem mit dem Scrollen hab ich jetzt gefunden aber das er bei jedem Endklammerzeichen und bei jedem Leerzeichen eine neue Zeile anfängt wollte ich nicht muss ich da mit getline arbeiten?

gruß Tetsuya
 
Ich glaube, mit fgets kommst du da weiter (Wenn du bei den alten File-Funktionen bleibst).
 
hi
Was meinst du damit? Ich habs mit fgets versucht und da kam immer die die Fehlermeldungen :
error C2446: '!=' : Keine Konvertierung von 'const int' in 'char *'
Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
error C2040: '!=' : 'char *' unterscheidet sich von 'const int' in bezug auf die Anzahl vorgenommener Dereferenzierungen
Generieren von Code...

Hab ich dich da jetzt falsch verstanden
Hier ist mein Quellcode :
void CEditorDlg::OnSelchangem1()
{

FILE * stream;
stream=fopen("Messdat.txt","r");

char szTemp[100];

while ( fgets (szTemp,HUGE_BUFFER,stream) != EOF )
{

m_List1.AddString(szTemp);
m_List2.AddString(szTemp);
}
fclose( stream );

int selt = m_List1.GetCurSel();
neudat.szMB_01 = selt;
}

gruß Tetsuya
 
Zurück