ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
3544
3544
EMPFEHLEN
-
22.02.08 13:44 #1
- 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
-
22.02.08 19:26 #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
-
YUV oder RGB Werte vom VLC auslesen
Von GAILTALER im Forum C/C++Antworten: 8Letzter Beitrag: 12.07.10, 13:48 -
Werte aus einer txt Datei auslesen
Von Losty74 im Forum PHPAntworten: 4Letzter Beitrag: 13.01.09, 22:15 -
Werte aus INI-Datei auslesen
Von benurb im Forum PHPAntworten: 2Letzter Beitrag: 11.03.07, 13:14 -
Werte aus einer Datei auslesen.
Von Neik05 im Forum JavaAntworten: 3Letzter Beitrag: 23.11.05, 14:26 -
Werte aus einer txt Datei auslesen
Von helga im Forum PHPAntworten: 13Letzter Beitrag: 28.07.03, 11:56





Zitieren
Login





