Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Zweidimensionales Array für eine Textdatei

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
11.08.2004, 09:13 Uhr
~Tanja
Gast


Hi,

Ich möchte gerne (wieder mal) eine Textdatei auslesen, die so aussieht:

database1;servername;server;etc;
database2;servername;server;...

Dabei soll der erste Wert der Zeile in eine Membervariable geschoben werden. Und je nachdem, welches Database ausgewählt wurde in dieser Membervariablen - CComboBox - , sollen sich die restlichen Werte aus einer Zeile in andere Membervariablen (EDIT) geschoben werden.

Zur Zeit sieht mein Code so aus:


C++:
CStdioFile fileR("C:\\apps\\Flatfiles\\Repository_Eingabe.txt", CFile::modeRead);
    CString fileRep;
    CString array[3][5];
    int p1 = 0, p2, i = 0, j = 0;

    while(fileR.ReadString(fileRep)){
        //Einlesen der Werte in einer Zeile
        for(int i=0; i<3; i++){
            //Einlesen aller Zeilen in der Textdatei
            for(int j=0; j<5; j++){
                p2 = fileRep.Find(';', p1);
                if (p2 < 0) p2 = fileRep.GetLength();
                array[i][j] = fileRep.Mid(p1, p2-p1);
                p1 = p2+1;
            }
        }
    }
    fileR.Close();



BEim ersten Durchlauf funktioniert es. Die erste Zeile wird korrekt eingelesen, allerdings wenn die nächste Zeile ausgelesen werden soll, bricht er in der inneren SChleife ab.

Was mach ich falsch???


Würde mich sehr freuen, wenn ihr mir (mal wieder) helfen könntet.

Grüsse Tanja
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.08.2004, 09:29 Uhr
~Airdamn
Gast


Du solltest p1 und p2 in der ersten for-Schleife wieder 0 setzen


C++:
for( int i = 0; i < 3; i++)
{
    p1 = 0;
    p2 = 0;
            //Einlesen aller Zeilen in der Textdatei
            for( int j = 0; j < 5; j++ )
            {
            ...

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.08.2004, 09:41 Uhr
~Tanja
Gast


Vielen Dank Airdamn.
Habe keinen Abbruch mehr.
Hoffentlich stimmt auch die Logik...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.08.2004, 10:03 Uhr
mmc20
puss in boots


hallo,
ich glaube nicht das das zu dem ergebnis führt welches du haben willst...

C++:
CStdioFile fileR("C:\\apps\\Flatfiles\\Repository_Eingabe.txt", CFile::modeRead);
CString fileRep;
CString array[3][5];
int p1 = 0, p2, i = 0, j = 0; // warum declarierst du hier i und j wenn du dann "for(int i" schreibst ?!

while(fileR.ReadString(fileRep)) //Einlesen einer Zeile
{
    for(int i=0; i<3; i++)
    {
        // <-- klappt so auf keinen fall ! du liest ja keine neue zeile mehr !?
        for(int j=0; j<5; j++)
        {
            p2 = fileRep.Find(';', p1);
            if (p2 < 0) p2 = fileRep.GetLength();
            array[i][j] = fileRep.Mid(p1, p2-p1);
            p1 = p2+1;
        }
    }
}
fileR.Close();


mach die "for (int i" weg und zähle das mit ner hilfsvariablen die nur incrementiert wird:

C++:
CStdioFile fileR("C:\\apps\\Flatfiles\\Repository_Eingabe.txt", CFile::modeRead);
CString fileRep;
CString array[3][5];
int p1 = 0, p2, j, zeile = 0;

while(fileR.ReadString(fileRep)) //Einlesen einer Zeile
{
    for(int j=0; j<5; j++)
    {
        p2 = fileRep.Find(';', p1);
        if (p2 < 0) p2 = fileRep.GetLength();
        array[zeile][j] = fileRep.Mid(p1, p2-p1);
        p1 = p2+1;
    }
    zeile++;
    p1 = 0;
}
fileR.Close();

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.08.2004, 10:21 Uhr
~Airdamn
Gast


Ja, das stimmt.
Das habe ich nicht beachtet, hab nur nach Fehlern geguckt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.08.2004, 10:34 Uhr
~Tanja
Gast


Hi,

..noch eine Frage hinterher.
Wenn ich aus meiner CComboBox einen Wert aussuche:


C++:
m_comboMember.GetCurSel();


möchte ich natürlich auch, dass die Werte aus einer Zeile im Array in die entsprechenden EDIT-Felder gesetzt werden.

Wie realisiere ich das am BEsten?? Mir fällt kein gescheiter Ansatz dazu ein.

Schon mal Danke im Voraus.

Tanja
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.08.2004, 10:40 Uhr
~Tanja
Gast


oh, ich habe erst im NAchhinein bemerkt, dass ihr noch was geschrieben habt.
Aber meine Frage steht trotzdem.

Und...Vielen Dank an euch beide für die Hilfe.

Tanja
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.08.2004, 11:02 Uhr
mmc20
puss in boots


als erstes solltest du dein array nach dem eintrag durchsuchen, mittels dem gefundenen index füllst du dann die edits mit den restlichen feldern dieses index...

C++:
bool findflag = false;
for ( int i = 0; i < anzahl_einträge_im_array; i++ ) {
    if ( array[i][0] == gesuchter_eintrag ) {
        findflag = true;
        member_des_EDIT1 = array[i][1];
        // ... mit allen members...
        // oder
        SetDlgItemText(IDC_EDIT1, array[i][1]);
        // usw.
    
    }
}
if ( !findflag ) {
    // eintrag nicht gefunden
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.08.2004, 11:02 Uhr
~Airdamn
Gast


Wenn ich Deine Frage richtig verstehe, dann musst Du einfach den Wert von GetCurSel() in eine Variable speichern. Dann kannst Du die Werte des Arrays in der jeweiligen Zeile in die EDIT-Felder eintragen:


C++:
int nSel = m_comboMember.GetCurSel();
m_edit1.SetWindowText( array[nSel][0] );
m_edit2.SetWindowText( array[nSel][1] );
m_edit3.SetWindowText( array[nSel][2] );
m_edit4.SetWindowText( array[nSel][3] );
m_edit5.SetWindowText( array[nSel][4] );

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.08.2004, 11:18 Uhr
~Tanja
Gast


hi,

Zunächst einmal vielen lieben Dank, dass ihr so schnell hilft.
@mmc20: Dein Vorschlag habe ich noch nicht ausprobiert. Mach ich aber gleich.
@Airdamn: Leider ist die Methode SetWindowText keine Methode für edit-Member.

Gibt es da spezielle MEthoden dafür?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: