Find,Mid,Left



  • Ich schreibe in ein CStringArray Werte, die ich mittels
    Find aus einer Datei ausgelesen habe. Nun ist das Problem, dass
    ich das in einer Schleife 20 mal laufen lasse.

    Wenn ich nun aber in dem Suchstring das Trennzeichen nur
    z.B. 6 mal habe, wird es ab den darauf folgenden Stellen
    wieder vom Anfang des Suchstring ermittelt.

    Das führt dazu, dass ich in meinem Array Daten doppelt habe.
    Wie kann den erneuten Durchlauf verhinden, oder mitbekommen
    wenn kein Trennzeichen mehr in der Zeile gefunden wird?
    Ich möchte in dem Fall die restlichen arraypositionen mit
    ("")belegen.

    CStringArray awert;
    CString wert="ball;haus;baum;auto;";//usw.
    
    int position1 = wert.Find(';');
    CString zeigen=(wert.Left(position1));
    if(zeigen=="")
    {
    	zeigen="\"\"";
    }
    
    awert.Add(zeigen);
    MessageBox(zeigen);
    
    //und weiter suchen...
    int position2=wert.Find(';',position1+1);
    zeigen=wert.Mid(position1+1,position2-position1-1); /
    if(zeigen=="")
    {
    	zeigen="\"\"";
    }
    awert.Add(zeigen);
    MessageBox(zeigen);
    //hier gehts weiter bis 20
    

    Kann man dieses ganze geraffel auch irgendwie kürzer darstellen?
    Ich meine die Anweisung mit dem "Find" bis Position 20...



  • Mach doch eine Schleifen, die sowas macht:
    "Teil1, Teil2, Teil3, Teil4"
    "Teil1" -> Zum Array dazupacken und aus Zeile rausnehmen
    "Teil2, Teil3, Teil4"
    "Teil2" -> Zum Array dazupacken und aus Zeile rausnehmen
    usw.
    Du hast Teil4 vor dir, wenn du kein Trennzeichen mehr findest.

    Pack den ins Array und du hast die Zeile soweit fertig. 🙂

    Und lass die Arraypositionen doch einfach weg. Dieser Lösung ist es egal, wieviele Teile eine Zeile hat. 🙂



  • mach doch eine while-Schleife.

    while (position = wert.Find(';') != -1)
    // hier weiter behandeln
    


  • Das passt alles irgendwie noch nicht!

    In meiner Textdate sind zwei Zeilen.
    Zeile1: test;
    Zeile2: a;b;

    Das Ergebnis ist in der Ausgabe für Zeile1:
    test;"";test

    Der erste Eintrag wird wieder geschrieben,aber why?

    Zeile2:
    a;b;"";

    In Zeile 2 ist wieder alles ok. Würde aber bei einem weiteren Eintrag
    so enden wie Zeile1. Es beginnt wieder alles von vorne...

    CStringArray awert;
    int p=0;
    int laden=0;
    
    //textadtei zeilenweise einlesen
    CString string,wert,zeigen;
    CStdioFile File;
    File.Open("c:\\testfile2.txt", CFile::modeRead,NULL);
    
    while(File.ReadString(string)){    
    p++;
    wert = string;
    
    int position1 = wert.Find(';');
    CString zeigen=(wert.Left(position1));
    if(zeigen==""||position1==-1)
    {
        zeigen="\"\"";
    }
    
    awert.Add(zeigen);
    MessageBox(zeigen);
    
    int position2=wert.Find(';',position1+1); 
    zeigen=wert.Mid(position1+1,position2-position1-1); 
    if(zeigen==""||position2==-1)
    {
        zeigen="\"\"";
    }
    
    awert.Add(zeigen);
    MessageBox(zeigen);
    
    int position3=wert.Find(';',position2+1); 
    zeigen=wert.Mid(position2+1,position3-position2-1); 
    if(zeigen==""||position3==-1)
    {
        zeigen="\"\"";
    }
    
    awert.Add(zeigen);
    
    //...
    MessageBox(zeigen);
    }
    

Anmelden zum Antworten