tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
668
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Mausi Mausi ist offline Rookie
    Registriert seit
    Mar 2004
    Beiträge
    7
    Hallo. Ich habe folgendes Problem:

    Von einer Datei X sollen Jeweils 4Datein erstellt werden. Der Namen besteht aus den Werten von dem Keyword FILIALE und DATUM. In diesen Dateien sollen nun die anderen Keywords mit Werten reingeschrieben werden, wobei Filiale und Datum nicht mehr reingehört. die 4Dateien erstellen habe ich. Aber bei mir wird der ganze Inhalt einer Stringzeile reingelesen. Wie kann ich also die 2Keywords wegnehmen?

    Hier wie ein bsp. wie die Werte von der Datei X aussehen:
    FILIALE=ZÜRICH;DATUM=20011002;ARTIKELGRUPPE=KÖRPERPFLEGE;ARTIKEL=SEIFE;ANZAHL=3000;PREIS=1.10
    Die Datei soll hier also Zuerich_20011002 heissen der Inhalt dieser Datei soll ab ARTIKELGRUPPE stehen!
    Hier meine Funktion, welche die Valiirung (schreibt man das so?) der Keywords macht:

    //=============================================================================
    function Ttext.ValueOfKeyword(var ganzerstring: string; keyword: string):string;
    //-----------------------------------------------------------------------------
    // A) Als Parameter erhalten wir eine Zeile aus der Eingangdatei und Keyword,
    // dessen Wert wir holen wollen
    // B) Wir suchen die Start-'Adresse' des Keywords
    // C) Danach suchen wir die Start-'Adresse' des Keyword-Wertes
    // D) Danach suchen wir die End-'Adresse' des Keyword-Wertes
    // E) Als 'result' liefer wir den Wert des Keywords zurück.
    // F) Reststring selektieren: ganze Linie - teilstring = Reststring!
    //-----------------------------------------------------------------------------
    var
    p, p2: integer;
    c: char;
    teilstring: string;
    rest_von_teilstring: string;

    begin

    //teilstring:= copy(ganzerstring, 1, pos(';',ganzerstring));
    rest_von_teilstring:= copy(ganzerstring, (Length(teilstring) +1), (Length(ganzerstring)-Length(teilstring)));
    p:=pos(keyword, ganzerstring);
    c:=ganzerstring[p];
    while(c <> '=') do begin
    inc(p);
    c:=ganzerstring[p];
    end;
    p2 := p;
    while(c <> ';') do begin
    inc(p2);
    c:=ganzerstring[p2];
    end;
    result := copy(teilstring, p+1, (p2-p)-1);
    ganzerstring:= teilstring + rest_von_teilstring;
    end;

    wo liegt der Hund begraben?

    danke
     

  2. #2
    Avatar von rtky_Trunks
    rtky_Trunks rtky_Trunks ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Ort
    Breisach
    Beiträge
    63
    Hi,

    wo liegt genau das problem? Oder weißt du das selber nicht?
    Kommt ein fehler beim ausführen?

    Was mir auf die schnelle auffällt ist das " ganzerstring" nicht unter Var steht.

    Gruss,
    MArc
     
    Genieße dein Leben ständig....Du bist länger tod als lebendig

  3. #3
    Avatar von Gawayn
    Gawayn Gawayn ist offline Mitglied Brokat
    Registriert seit
    Dec 2003
    Beiträge
    309
    In diesem Fall denke ich, dass es dir mehr bringt, wenn du dir einfach mal einen fertigen Code ansiehst und daraus lernst. Also schau dir meinen hier an, ich denke, er tut ungefähr das, was du willst. Allerdings arbeitet er mit einer Kopie von ganzerstring, wie du siehst, und kürzt also nur die Kopie und nicht den String selbst.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    function ValueOfKeyword( ganzerstring: string; keyword: string ): string ;
    label
        Start, ExitLoop ;
    var
        sem,g: Integer ;
        t,k: string ;
    begin
        sem := 0 ;
        ganzerstring := ganzerstring+';' ;
     
    Start:
     
        sem := Pos( ';', ganzerstring ) ;
        if( sem=0 ) then goto ExitLoop ;
     
        t := Copy( ganzerstring, 1, sem-1 ) ;
        ganzerstring := Copy( ganzerstring, sem+1, Length( ganzerstring ) ) ;
        g := Pos( '=', t ) ;
     
        k := Copy( t, 1, g-1 ) ;
        if( k<>keyword ) then goto Start ;
     
    ExitLoop:
     
        Result := Copy( t, g+1, Length( t ) ) ;
    end ;
    Mir ist klar, dass ich bei den Copy-Aufrufen die Längen der Strings nicht berechne, aber das ist der Copy-Funktion ja egal.

    -Gawayn
    Geändert von Gawayn (06.03.06 um 19:49 Uhr)
     

Ähnliche Themen

  1. Filehandling
    Von Cailleach im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 20.12.04, 16:21
  2. Filehandling (auslesen) C
    Von bluewaver im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 22.03.04, 23:35
  3. filehandling Dateien umbenennen
    Von michaelschuler im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 06.08.03, 12:55
  4. resultat rauslesen
    Von mr_d2254 im Forum PHP
    Antworten: 15
    Letzter Beitrag: 22.03.02, 14:42
  5. c - frage ( FILEhandling )
    Von murdi im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 12.03.02, 19:43