Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Fehler beim Auslesen aus einer Datei

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 ] > 3 < [ 4 ]
020
30.07.2004, 14:34 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
    int p1 = 0, p2; //p1 wird quasi als zeiger missbraucht "zeigt" aufs erste zeichen des wortes

    while (p1 < fileRep.GetLength()) //so lange p1 kleiner ist als fileRep.Length
    {
        p2 = fileRep.Find(';', p1); //suche von p1 bis fileRepende das zeichen;
        if (p2 < 0) p2 = fileRep.GetLength(); //wenn p2<0, was soviel heisst es wurde kein semicolon mehr gefunden lass p2 ans ende zeigen
        CString part = fileRep.Mid(p1, p2-p1); string part ist der teilstring von p1 mit der länge p2-p1(dahinter ist das trennzeichen
        p1 = p2+1;//lasse p1 hinters gefundene trennzeichen zeigen...

        m_repository.AddString(part); gefundenen substring hinzufügen
    }
}



wenn du die in getrennte variablen füllen willst musst du zunächst wissen wieviele substrings es in deinem string gibt oder du musst einen datentyp zum speichern nehmen der dir belibiges anhängen ermöglicht...
dann lässt du einen zähler mitlaufen und anstatt m_repository.AddString(part); fügst du immer in dein array ein..
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
09.08.2004, 08:11 Uhr
~Tanja
Gast


Hi,

Ich konnte leider nicht eher zurück schreiben, weil ich im Urlaub war.
Vielen Dank für die Erklärung, hat mir sehr weiter geholfen.

Grüsse
Tanja
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
09.08.2004, 11:12 Uhr
~Tanja
Gast


Hi,

Ich habe das ausgeführt, was du mir empfohlen hast.
Und es klappt auch soweit. Allerdings wird mit diesem Code nur die erste Zeile ausgelesen:

C++:
while(fileR.ReadString(fileRep))
{
        while (p1 < fileRep.GetLength())
        {
            p2 = fileRep.Find(';', p1);

            if (p2 < 0) p2 = fileRep.GetLength();
            
            part[i]= fileRep.Mid(p1, p2-p1);
            
            switch(i){
                case 0: m_repository.AddString(part[i]);
                        break;
                case 1: m_kombination.AddString(part[i]);
                        break;
                case 2: m_servername.AddString(part[i]);
                        break;
                case 3: m_userID.AddString(part[i]);
                        break;
                case 4: m_user.AddString(part[i]);
                        break;
                default:break;
            }

            p1 = p2+1;
            i++;

        }

    }
    fileR.Close();




Die nächsten Zeilen möchte ich auch in dieselben Variablen hinein schieben.

Meine Textdatei sieht so aus:

Repository-Name;Servertyp;Servername;....;
Repository-Name;Servertyp;Servername;...; (SChon diese Zeile wird nicht eingelesen!)

Je nachdem, welcher Wert es ist, möchte ich diese in die entsprechende Variable setzen.

Wäre soooo dankbar, wenn mir wieder geholfen wird.

Und danke schon mal...

Tanja
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
09.08.2004, 11:57 Uhr
~toxic
Gast


hi, irgendwie steig ich bei deinem code nicht dahinter, was genau soll das mit der switch, und wieviele elemente hat part[], die variable "i" wird ja jedes mal incrementiert. wenn i > 4 ist wird doch nur noch die default-switch ausgeführt dh. das "gelesene" wird nirgends hingeschrieben und part[i] schreibt bestimmt in speicher der ihm nicht gehört ?!

so wie ich das sehe hast du einen datensatz : "A;B;C;D;E;" in jeder zeile der datei.
"A" soll dan in m_repository eingefügt werden, "B" in m_kombination, usw. ... und das dann mit jeder zeile ?
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
09.08.2004, 12:46 Uhr
~Tanja
Gast


Hi,
Ja, genau so soll das sein! In jeder Zeile soll genau dieselbe Prozedur erfolgen.

Mir ist leider nix anderes eingefallen!
Jeder Wert einer Zeile soll vorallem deshalb in den selben Member geschoben werden, damit ich mir später ein Wert aus der ComboBox aussuchen kann und die restlichen Werte sich dementsprechend einordnen.

Ich weiss nicht, ob ich mich verständlich ausdrücken konnte.

Tanja
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
09.08.2004, 13:15 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hmm also dann brauchst du die teile auch nicht mehr in part speichern sondern kannst die direkt in die comboboxes reinballern... eigentlich brauchst du dann auch keine innere schleife mehr weil du ja immer genau 5 Teilstrings finden musst...

an sonten wenn du es mit deiner schleife machen willst musst du i nach dem inkrementieren

noch modulo 5 rechnen damit das immer zwischen 0 und 4 liegt...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
09.08.2004, 13:19 Uhr
~toxic
Gast


also... da würd ich folgendes vorschlagen :

C++:
CString tmp[5];

while(fileR.ReadString(fileRep))
{
    int i = 0;
    while (p1 < fileRep.GetLength())
    {
         p2 = fileRep.Find(';', p1);
         if (p2 < 0) p2 = fileRep.GetLength();
         tmp[i]= fileRep.Mid(p1, p2-p1);
         p1 = p2+1;
         i++;
     }
     m_repository.AddString(tmp[0]);
     m_kombination.AddString(tmp[1]);
     m_servername.AddString(tmp[2]);
     m_userID.AddString(tmp[3]);
     m_user.AddString(tmp[4]);
}
fileR.Close();


--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
027
09.08.2004, 13:29 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@toxic
magst du keine forschleifen?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
028
09.08.2004, 14:33 Uhr
~Tanja
Gast


Vielen Dank Toxic, probier das gleich mal aus...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
029
09.08.2004, 14:45 Uhr
~Tanja
Gast


oh, und natürlich dir auch windalf. schuldige!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 < [ 4 ]     [ 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: