mikrocontroller.net

Forum: PC-Programmierung VBA regex Pattern, Datenblatt auslesen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: NotVBAgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: NotVBAgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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])"

Autor: T. Regex der PCREdiger (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
$ LINIE='Output capacitance C oss V GS=0 V, V DS=25 V, -4.1 6'
$ 
$ echo "$LINIE" ¦ grep -oP '\S[\.\d]+\s*$'
6
$
$ LINIE='Output capacitance C oss V GS=0 V, V DS=25 V, -4.1 16'
$ 
$ echo "$LINIE" ¦ grep -oP '\S[\.\d]+\s*$'
16
$
$ LINIE='Output capacitance C oss V GS=0 V, V DS=25 V, -4.1 16.4'
$ 
$ echo "$LINIE" ¦ grep -oP '\S[\.\d]+\s*$'
16.4
$
$ LINIE='Output capacitance C oss V GS=0 V, V DS=25 V, -4.1 .7'
$ 
$ echo "$LINIE" ¦ grep -oP '\S[\.\d]+\s*$'
.7
$


Sorry no VBA, standards compliant tools only.

Autor: NotVBAgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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,})([ ]+)?"

Autor: NotVBAgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: NotVBAgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.