ListView und Delimiter / DelimitedText



  • Hallo,

    Ich lege eine ListView (LView) an; aus einer FileListe (flDateien)
    lese ich die Dateinamen aus und deren Inhalt mit Daten->LoadFromFile(z1)
    dann den Inhalt der Datei in die Stringliste Daten. In Daten->Strings[0]
    steht dann jeweils eine Kopfzeile, die ich nun in die ListView einsetzen
    möchte. Das Format der Kopfzeile ist dabei z.B.

    00 |5401|Kommunikationsanschluss (KS)||Verwaltung|KomTec (ADIK)|1.OG, 113||27.1UATB06,21.EGA:AA:02|27.1UAAG20|||||||||||Scholz, Stefan|Admin|07.06.2005, 09:15:54 > Kunde (Di)|07.06.2005, 09:15:54|||||||||||||||||||||||||||||||||

    Mein Trenner (Delimiter) ist das Pipe (ASCI 124). Mit folgenden Zeilen
    realisiere ich das ganze; die Caption=5401 und ab Kommunikationsanschluss (KS) dann die SubItems:

    Boolean Aktualisieren(int p1,int p2,int p3,AnsiString pt1,TObject *Sender)
    {AnsiString z1,z2,z3; int i2,i3,i4,iMax,iAnz;                                   // Vars definieren
     TListItem   *ListItem;                                                         // Vars definieren
     TListColumn *ListColumn;                                                       // neues Objekt anlegen
     TListView   *LView = dynamic_cast<TListView *> (Sender);                       // Versuchen, Sender als ListView anzusprechen
     TDateTime   DateTime=Now();                                                    // Datum und Uhrzeit speichern
    
     Form1->Cursor=crHourGlass;                                                     // Sanduhr
     LView->Items->BeginUpdate();                                                   // Änderungen beginnen...
    
     i2=Form1->frm1_btnAktuell->Tag;                                                // Merker auslesen
     Form1->frm1_btnAktuell->Tag=0;                                                 // und löschen
     if(i2==1) { Aktualisieren(99,0,0,"",LView); }                                  // mit Kopfzeilen (Column) aktualisieren
    
     switch(p1) {                                                                   // was aktualisieren?
     case 0:                                                                        // KOMPLETT
     case 1:                                                                        // SCHNELL
      Form1->frm1_lblTab1_Hinweis->Visible=true;                                    // Hinweisschild zeigen
    
      LView->Clear();                                                               // alle Einträge löschen
      iAnz=Form1->frm1_flDateien->Count;                                            // Anzahl Dateien
      Form1->frm1_proBalken->Max=iAnz;                                              // Balken einstellen
      Form1->frm1_proBalken->Position=0;                                            // und erstmal auf Null setzen
    
      for(int i2=0;i2<iAnz;i2++) {                                                  // alle Einträge absuchen
       Form1->frm1_proBalken->Position=i2+1;                                        // und erstmal auf Null setzen
    
       z1=Form1->frm1_flDateien->Items->operator [](i2);                            // Filename auslesen
       z1=Form1->PrgGeraet+"\\"+z1;                                                 // Pfad ergänzen
       Form1->Daten->LoadFromFile(z1);                                              // und File laden
       z2=Form1->Daten->Strings[0];                                                 // Kopfzeile aus Feld Daten übergeben
    
       ListItem=LView->Items->Add();                                                // neue Zeile anhängen
       ListItem->Caption=DatenPipe(1,1,z2,"!!");                                    // Bezeichnung übergeben
       if(p1==0) {                                                                  // Komplette Liste aktualisieren
        z2=Trim(z2); i3=z2.Length();                                                // Länge String?
        z2=Trim(z2.SubString(z2.AnsiPos("|")+1,i3)); z2=Trim(z2.SubString(z2.AnsiPos("|")+1,i3));   // vorne die Caption kürzen und nur Rest übergeben
        //if(Form1->PrgComp) { ShowMessage("Daten: "+z2); }                           // nur im IDE
        ListItem->SubItems->Delimiter=124;                                          // Trenner ist Pipe
        ListItem->SubItems->DelimitedText=z2;                                       // und einsetzen
       }                                                                            // ende if(p1
      }                                                                             // ende for(i2
    

    Funktioniert sehr gut, bis auf folgendes. Einträge mit ( wie z.B.
    Kommunikationsanschluss (KS) werden auf 2 Spalten aufgeteilt, obwohl
    dazwischen weiss Gott kein | steht. Hat jemand eine Idee?
    QuoteChar habe ich testhalber mal auf Null gesetzt, auch keine Erfolg.

    Danke für jeden Tipp; mir kommt das unlogisch vor und grübel an dem
    Problem auch schon sehr lange.

    Gruss Stefan Scholz


Anmelden zum Antworten