tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
3544
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    yasukatakaya yasukatakaya ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    31
    Hallo,
    ich bin ein Newbie in Sachen Delphi und deswege frage ich hier im Forum nach, ob ihr mir helfen könnt
    und zwar habe ich folgendes Problem:

    Ich lese ein paar Infos aus einem Prog (Altium Designer) wie z.B. einen Widerstand R1 dazu will ich in
    einer Tabelle (xls- oder csv-Datei) nachgucken, welcher Wert dazugehört, und diesen füge ich dann in
    das Prog ein!
    Also das Problem ist, ich hab eine Variable in der verschiedene Bauteile gespeichert werden und diese
    werden dann in einer Tabelle gesucht und das dazugehörige Wert etc. in einer anderen Variable
    gespeichert, die ich dann in das Prog einfügen werde, wie kann ich dieses bewerkstelligen?!

    Ich hoffe mir kann jemand helfen!

    Danke im Voraus und einen schönen Abend noch!

    PS: die datei sieht zB so aus
    HTML-Code:
    Value   Designator	    Firma
    20K	       R1	       a
    130K	       R2	       b
    34K	       R3	       c
    45K	       R4	       d
    123K	       R5	       e
    76K	       R6	       f
     

  2. #2
    Registriert seit
    Mar 2004
    Beiträge
    441
    Ich bin nicht mehr in der Arbeit und kann daher den Code nicht mehr so ohne weiteres testen, aber ich versuche mal, was Passendes zusammen zu schreiben:
    Code delphi:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    
    uses
      StrUtils,
      SysUtils;
     
    function GetValue(pFilename: String; pKey: String): String;
    var
      lFile: TStringList;                    // Puffer für die CSV-Datei
      i: Integer;                               // Schleifenzähler
      nEnd: Integer;                        // Index für auszuschneidenden Textteil
      lBuffer: String;                        // Lokaler Textpuffer für Stringbearbeitung
      nPos: Integer;                        // Lokaler Substring-Zeiger
    begin
      Result := '';                            // Generell ist erstmal nicht gefunden worden
      if (pFilename <> '') and           // Dateiname, Suchbegriff müssen gegeben sein...
        (pKey <> '') and
        FileExists(pFilename) then   // ...und die Datei natürlich auch existieren
      begin
        lFile := TStringList.Create;
        lFile.LoadFromFile(pFilename);
        if lFile.Count > 0 then           // Vergleichssuche startet nur, wenn die Datei auch Inhalt
        begin                                  // hatte
          for i := 0 to lFile.Count - 1do
          begin
            // Pos schaut, ob der Suchbegriff (z.B. R1) in der gelesenen Zeile vorkommt.
            // Falls ja, gibt Pos die Position in der Zeile wieder. Dabei ist Pos aber auf 1
            // basiert und nicht wie die meisten anderen Stringfunktionen auf 0!
            nPos := Pos(pKey, lFile.Strings[i]);
     
            if nPos > 0 then
            begin
              // Wenn der Suchbegriff gefunden wurde, wird erstmal alles Links des
              // Suchbegriffs aus der gelesenen Zeile entfernt (gepuffert natürlich, die
              // Originaldatei wird nicht verändert.
              lBuffer := RightStr(lFile.Strings[i], nPos);
              lBuffer := Trim(lBuffer);
     
              // Der Wert zum gesuchten Begriff gilt als beendet, wenn wieder ein
              // Leerzeichen gefunden wird
              nEnd := Pos(' ', lBuffer);
     
              // Es wurde definitiv der Vergleichswert gefunden. Wenn also kein Leerzeichen
              // mehr folgt, kann es z.B. sein, dass der gesuchte Wert am Ende der Zeile
              // stand und dementsprechend muss der gesamte Rest der Zeile als Wert
              // verwendet werden.
              if nEnd := 0 then nEnd := Length(lBuffer);
     
              // String passend auf den Wert zusammenschneiden
              Result := Left(lFile.Strings[i], nEnd);
     
              if lFile <> nil then FreeAndNil(lFile);
              Exit;
     
            end;
          end;
        end;
     
        // Auf jeden Fall die verwendeten Ressourcen wieder auflösen, egal ob der
        // gesuchte Wert gefunden wurde oder nicht.
        if lFile <> nil then FreeAndNil(lFile);
      end;
    end;
     
    ...
     
    var
      lKey, Value: String;
      lKey := 'R1';
      lValue := GetValue('irgendeine Datei.txt', lKey);
    var

    Das sollte als erste Idee helfen, denke ich. Wie gesagt: Ich kann's vor Montag nicht mehr testen (oder ganz exakt: will es nicht mehr testen ), insbesondere bei den Indizes für die Pos() und RightStr() und LeftStr()-Sachen bin ich mir nicht so 100% sicher, da müsstest du ggf. nochmal in der Hilfe nachschauen.

    Schönes Wochenende noch.



    Nachtrag:
    Sorry, habe gerade noch mal den Aufbau der Datendatei gesehen und da haut das so nicht so ohne weiteres hin mit dem geposteten Code. Wenn die Spalten deiner Datendatei immer exakt in dieser Reihenfolge angegeben sind (Value, Designator, Firma), dann kannst du den Wert einfacher extrahieren mit
    Code delphi:
    1
    
    Result := LeftStr(lFile.Strings[i], Pos(' '));
    ,
    wobei jedoch der gesamte lBuffer nicht benötigt wird (ein Einsatz von lBuffer verhindert dann sogar ein korrektes Ergebnis).
    Aber ich lasse auch mal den ursprünglichen Code stehen, bei dem ich irrtümlich von der Reihenfolge Designator, Value, Firma ausging.
    Sollte die Spaltenreihenfolge variabel sein, dann gib nochmal Bescheid, da lässt sich sicher auch noch was finden.
    Geändert von CSANecromancer (22.02.08 um 19:32 Uhr)
     

Ähnliche Themen

  1. YUV oder RGB Werte vom VLC auslesen
    Von GAILTALER im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 12.07.10, 13:48
  2. Werte aus einer txt Datei auslesen
    Von Losty74 im Forum PHP
    Antworten: 4
    Letzter Beitrag: 13.01.09, 22:15
  3. Werte aus INI-Datei auslesen
    Von benurb im Forum PHP
    Antworten: 2
    Letzter Beitrag: 11.03.07, 13:14
  4. Werte aus einer Datei auslesen.
    Von Neik05 im Forum Java
    Antworten: 3
    Letzter Beitrag: 23.11.05, 14:26
  5. Werte aus einer txt Datei auslesen
    Von helga im Forum PHP
    Antworten: 13
    Letzter Beitrag: 28.07.03, 11:56