Hallo zusammen, ich hoffe jemand kann mir helfen, ich möchte eine Datenblatt (pdf) auslesen und bestimmt Werte in ein Exceldokument laden. Das ganz funktioniert auch schon so halb, nur habe ich Probleme beim einlesen mancher Werte. Aber noch kurz zum ablauf, ich konvertiere das PDF Dokument zu einer TXT Datei mit pdftotxt.exe und durchsuche die dann eben nach bestimmten Strings wie zum Beispiel (jetzt mal von einem FET Datenblatt) "Input capacitance" (Ciss) Jetzt kann dieser Wert allerdings einstellig also z.B. "2", zweistellig z.B. "20", oder "2.0" sein Die Zeile sieht nach dem Umwandeln in txt so aus: Input capacitance (viele Leerzeichen) C iss (viele Leerzeichen) - (wenige Leerzeichen) 13 (wenige Leerzeichen) 20 Wie kann ich jetzt mit den Pattern die obrigen drei Fälle abdecken (in einer Zeile, ohne If else) Ich möchte auch immer nur den maximal Wert auslesen, in dem fall also die 20 Ich wäre wirklich sehr dankbar wenn da jemand helfen könnte.
Hatte oben die falsche Zeile kopiert, hier ist es etwas schwieriger, da hier auch die 25 ausgelesen werden, was ich aber nicht brauche. Dafür aber die 6 weggelassen werden, die ich eigentlich brauche. Output capacitance C oss V GS=0 V, V DS=25 V, - 4.1 6 Mein Pattern sieht momentan so aus regex.Pattern = "Output [Cc]ap.*[^\r\n]+(\d[\.]?[\d]?[^\s]).*[^\d](\d[\.]?[\d]?[^\s])"
1 | $ LINIE='Output capacitance C oss V GS=0 V, V DS=25 V, -4.1 6' |
2 | $ |
3 | $ echo "$LINIE" ¦ grep -oP '\S[\.\d]+\s*$' |
4 | 6 |
5 | $ |
6 | $ LINIE='Output capacitance C oss V GS=0 V, V DS=25 V, -4.1 16' |
7 | $ |
8 | $ echo "$LINIE" ¦ grep -oP '\S[\.\d]+\s*$' |
9 | 16 |
10 | $ |
11 | $ LINIE='Output capacitance C oss V GS=0 V, V DS=25 V, -4.1 16.4' |
12 | $ |
13 | $ echo "$LINIE" ¦ grep -oP '\S[\.\d]+\s*$' |
14 | 16.4 |
15 | $ |
16 | $ LINIE='Output capacitance C oss V GS=0 V, V DS=25 V, -4.1 .7' |
17 | $ |
18 | $ echo "$LINIE" ¦ grep -oP '\S[\.\d]+\s*$' |
19 | .7 |
20 | $ |
Sorry no VBA, standards compliant tools only.
Ich habe es inzwischen geschafft nur den letzten Wert auszulesen (der mich eigentlich auch nur interessiert) Das Pattern zu der Zeile "Input capacitance C iss - 13 20 pF" lautet "Input [Cc]ap.*[^\n\r]+[ ]+([\d\.]{1,})([ ]+)?" Und für RDSon, bei dem auch noch UGS ausgelesen werden soll "Drain-source on-state resistance R DS(on) V GS=4.5 V, I D=0.25 A - 2.0 4 " "[Dd]rain.*[Rr]es.*[^\n\r]+= ?([\d\.]{1,}) ?V.*[^\n\r]+[ ]+([\d\.]{1,})([ ]+)?"
Hallo, ich habe nochmal so ein Sonderfall und hoffe jemand kennt sich da etwas besser damit aus als ich. Ich habe folgenden String in meinem Textdokument: RDS(on) Static Drain-to-Source On-Resistance --- --- 0.025 VGS = 10V, ID = 29A und in einem anderen Datenblatt eines anderen Herstellers: Drain-source on-state resistance R DS(on) V GS=4.5 V, I D=0.25 A - 2.0 4 Auslesen möchte ich einmal natürlich den Widerstand, also im ersten Fall 0,025 und im zweiten 4 (ich will immer den Maximalwert). Zusätzlich möchte ich noch die Spannung bei der das gemessen wurde auslesen (später auch optiononal noch den Strom, aber das ist jetzt erst einmal egal) Mein Pattern sieht momentan wie folgt aus: regex.Pattern = "[Dd]rain.*[Oo]n.*[^\n\r]+=[ ]*([\d\.]{1,}) ?V.*[^\n\r]+ [ ]+([\d\.]{1,})([ ]+)?" Mein Problem ist das er nun bei dem ersten Datenblatt die 10V zwar erkennt, aber dann natürlich die 29 als Widerstand erkennt und nicht die 0,025... Für das zweite Datenblatt funktioniert der Pattern. Wie muss ich den Pattern nun anpassen, dass er Spannung und Strom vor und nach dem Widerstandswert erkennt?
NotVBAgeek schrieb: > Mein Problem ist das er nun bei dem ersten Datenblatt die 10V zwar > erkennt, aber dann natürlich die 29 als Widerstand erkennt und nicht die > 0,025... > Für das zweite Datenblatt funktioniert der Pattern. > Wie muss ich den Pattern nun anpassen, dass er Spannung und Strom vor > und nach dem Widerstandswert erkennt? Dein Problem ist nicht, was dein Pattern matched, sondern offensichtlich die Tatsache, dass du keine Ahnung hast, was du da eigentlich tust. Lerne RE's, dann weißt du erstens, wie du die RE für dein Problem umformulieren musst, und zweitens, dass RE's immer nur so intelligent und anpassungsfähig sein können wie ihre Verfasser. Merke: eine RE ist keine KI... Nichtmal näherungsweise...
c-hater schrieb: > NotVBAgeek schrieb: > >> Mein Problem ist das er nun bei dem ersten Datenblatt die 10V zwar >> erkennt, aber dann natürlich die 29 als Widerstand erkennt und nicht die >> 0,025... >> Für das zweite Datenblatt funktioniert der Pattern. >> Wie muss ich den Pattern nun anpassen, dass er Spannung und Strom vor >> und nach dem Widerstandswert erkennt? > > Dein Problem ist nicht, was dein Pattern matched, sondern offensichtlich > die Tatsache, dass du keine Ahnung hast, was du da eigentlich tust. > > Lerne RE's, dann weißt du erstens, wie du die RE für dein Problem > umformulieren musst, und zweitens, dass RE's immer nur so intelligent > und anpassungsfähig sein können wie ihre Verfasser. > > Merke: eine RE ist keine KI... Nichtmal näherungsweise... Danke für deine Antwort, ich weiß das ich mit RE noch nicht wirklich gut umgehen kann. Aber nachdem ich die Lösung für das Problem doch recht schnell brauche, wäre es wirklich nett richtige Hilfe zu leisten... Ich hatte dabei an sinnvolle Denkanstöße oder Code Stücke gedacht und weniger an unproduktive verbale nonsens Ausscheidungen. Wäre wirklich nett wenn jemand, der sich mit regex Pattern schon mal beschäftigt hat, mir helfen könnte. Danke :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.