CString - Multiple String suche?



  • Hi, hab folgendes Problem:

    Ich habe einen String der sieht z.B.: so aus
    Drive C: Fixed Disk
    Volume Name: Windows 2000 (NTFS)
    Volume Serial: 2293555577
    Total Space: 10,742,181,888 bytes
    Free Space: 7,186,571,264 bytes
    Drive E: Network Disk
    Volume Name: (NTFS)
    Drive F: Fixed Disk
    Volume Name: something (NTFS)
    Volume Serial: 2492504988
    Total Space: 4,622,573,568 bytes
    Free Space: 2,043,850,752 bytes
    Drive G: Network Disk
    Volume Name: (NTFS)
    Drive P: Network Disk
    Volume Name: (NTFS)
    Drive X: Network Disk
    Volume Name: (NTFS)

    So daraus will ich jeweils nur den Block haben, der auch ne Fixe Disk enthält, also keine Network Disk(s)!

    Die Laufwerksbuchstaben sind variabel, und ich glaub da liegt auch mein Problem! Also ich habe das schon erfolgreich aus einem noch viel längeren String gefilter, aber wie kann ich mir jetzt immer nur so ein Block raus filtern, und das mehrfach?? 😕
    **
    Drive C: Fixed Disk
    Volume Name: Windows 2000 (NTFS)
    Volume Serial: 2293555577
    Total Space: 10,742,181,888 bytes
    Free Space: 7,186,571,264 bytes
    **

    Als nächstes muss dann Drive F kommen, dazwischen sind es ja Network Disk(s)
    Wäre echt Klasse wenn mir jemand helfen kann...ich zerbrech mich daran schon den ganzen Tag den Kopf 😞



  • Wenn du das meinst:

    while(f.ReadString(str))
    {
      str.TrimLeft();str.TrimRight();
      if(str.Left(5)=="Drive" && str.Right(10)=="Fixed Disk")
      {
        // Block auslesen
      }
    }
    

    /E: Eig kann man sich das <str.Left(5)=="Drive"> auch schenken

    [ Dieser Beitrag wurde am 11.07.2002 um 18:41 Uhr von Nemesyzz editiert. ]



  • Ok, das brechen hat ein Ende 😃

    int
        sub,
        beg,
        end;
    CString
        str1,
        str2;
    
    for(beg = str1.Find("Drive", 0); ;beg = end) //beginn mit erstem drive
    {
        sub = str1.Find("Fixed", beg);
        if(sub < 0) // fixed nicht gefunden
             break;
        end = str1.Find("Drive", beg +1); //ende mit nächstem drive
        if(end < 0) //wenn kein nächstes vorhanden
            end = str1.GetLength(); //ist gesammtlänge das ende
    
        if(beg < sub&&sub < end) //ist fixed im gefundenem bereich
        {
            str2 = str1.Mid(beg, end - beg);
        }
    }
    


  • @ByteSlider : SAU COOL funzt soweit,
    nur das er mir meine C Platte immer 2 mal aufführt, das bekomme ich aber wohl noch hin.... DANKE AUF JEDENFALL..

    @Nemesyzz : danke auch dir, werd probeweise mal deine version auch testen 😉



  • Achja, find ich wichtig für später... ---->>> FAQ -->> done.


Anmelden zum Antworten