Extrahieren des reinen Textes aus einer HTML-Seite.

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Re: Extrahieren des reinen Textes aus einer HTML-Seite.

Beitrag von dige »

Hallo Brigitte, ich nehme mal an, du hast eine Software (THEOS-BASIC) die Daten ausgibt (in Html) und dann möchtest du mit einer anderen Software die Daten einlesen und verarbeiten?

Das lässt sich mit JSON in Purebasic sehr gut lösen. Schau Dir dazu bitte folgende Vorgehensweise an:

Code: Alles auswählen

; 1. Daten erzeugen und als JSON speichern:
Structure _THEOS
  Autor.s
  Template.s
  LastAuthor.s
  NamederBank.s
EndStructure

Define Out._THEOS

Out\Autor = "Stefan"
Out\Template = "Normal"
Out\LastAuthor = "Stefan"
Out\NamederBank = "Sparkasse"

CreateJSON(0)
InsertJSONStructure(JSONValue(0), @Out, _THEOS)
txt.s = ComposeJSON(0, #PB_JSON_PrettyPrint)
FreeJSON(0)

Debug txt
Die in txt.s gespeicherten Daten kannst du dann in einer Datei speichern.
Die Daten sehen dann so aus:

Code: Alles auswählen

{
  "LastAuthor" : "Stefan",
  "NamederBank": "Sparkasse",
  "Autor"      : "Stefan",
  "Template"   : "Normal"
}


Wenn Du dann die Daten mit Purebasic einlesen und bearbeiten willst, würde das so gehen:

Code: Alles auswählen


Define In._THEOS
; Daten in txt.s einlesen bspw. mit ReadFile() 
txt.s = ~"{\"LastAuthor\": \"Stefan\", \"NamederBank\": \"Sparkasse\", \"Autor\": \"Stefan\", \"Template\": \"Normal\" }"
ParseJSON(0, txt)
ExtractJSONStructure(JSONValue(0), @In, _THEOS)

Debug In\NamederBank
In\NamederBank = "Deutsche Bank"
Vielleicht hilft dir das weiter?
"Papa, ich laufe schneller - dann ist es nicht so weit."
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Extrahieren des reinen Textes aus einer HTML-Seite.

Beitrag von matbal »

Hier eine primitive Lösung von mir auf dein erstes Post.
Ich setze erst mal vor und hinter den Tags Zeilenumbrüche und lösche dann alle überflüssigen Zeilenumbrüche. Das geht bestimmt auch effizienter.

Code: Alles auswählen

EnableExplicit

Define InHtml$ = ~"<li><p style=\"margin-bottom: 0cm;\">12-Gefährdung des Kindeswohl</p></li>\r\n" + 
          ~"<li><p style=\"margin-bottom: 0cm;\">13-Eingeschränkte Erziehungskompetenz der Eltern</p></li>\r\n" + 
          ~"<li><p style=\"margin-bottom: 0cm;\">14-Belastungen des jungen Menschen durch Problemlagen der Eltern</p></li>\r\n" +
          ~"<li><p style=\"margin-bottom: 0cm;\">15-Belastungen des jungen Menschen durch< familiäre Konflikte</p></li>\r\n" +
          ~"<li><p style=\"margin-bottom: 0cm;\">16-Auffälligkeiten im sozialen Verhalten</p></li>"

Define OutHtml$


Procedure.s LoadHtml(File$)
   ; Datei in String laden
   
   Protected html$
   If ReadFile(0, File$, #PB_UTF8)
      html$ = ReadString(0, #PB_File_IgnoreEOL)
      CloseFile(0)
   EndIf
   ProcedureReturn html$
   
EndProcedure



Procedure.s FormatHtml(Text$)
   ; Tags umformormatieren
   
   text$ = ReplaceString(text$, "<", ~"\r\n<")        ; Umbruch vor Tag setzen
   text$ = ReplaceString(text$, ">", ~">\r\n")        ; Umbruch nach Tag setzen
   
   CreateRegularExpression(0, ">\s+<")                ; Leerraum zwischen Tags
   text$ = ReplaceRegularExpression(0, text$, "><")   ; entfernen
   
   ProcedureReturn text$
   
EndProcedure

;InHtml$ = LoadHtml("d:\Download\htm.txt")
OutHtml$ = FormatHtml(InHtml$)

Debug "Vorher: " 
Debug InHtml$

Debug "----"
Debug "Hinterher"
Debug OutHtml$
brigitte2018
Beiträge: 35
Registriert: 16.07.2018 11:14

Re: Extrahieren des reinen Textes aus einer HTML-Seite.

Beitrag von brigitte2018 »

Herzlich Dank, Euch allen!

Ich werde mich morgen an die Auswertung machen. Soweit ich es jetzt beurteilen kann, wird es, wie von mir gewünscht, funktionieren.

Die Folge der einzelnen Schritte ist:

1. Erstellen eines Formulars (1 Seite, kann aber größer als eine übliche Seite sein) mit einer Menge von Ein-/Ausgabefeldern (Zahlen und Buchstaben)
2. Separieren der HTML-Befehle usw. von den Inhalten mit dem Unterscheiden von HTML-Befehlen und den eigentlichen Inhalten.
3. Das ergibt eine Datei, die fortlaufend durch gezählt ist und sich daher zur Maske eignet.
4. Zur Bildung von neuen HTML-Seiten mit anderen Daten verwendet man nur ein einziges Programm.

NOCHMALS DANKE und ich werde berichten.

LG, Brigitte.
brigitte2018
Beiträge: 35
Registriert: 16.07.2018 11:14

Re: Extrahieren des reinen Textes aus einer HTML-Seite.

Beitrag von brigitte2018 »

Hi,

leider funktionieren die vorgeschlagenen 'codes' für meine Anwendung nicht. Schade. Ich werde jetzt also 'zu Fuss' programmieren wie im nachfolgenden kurzen Beispiel aus den Codebeispielen:

Code: Alles auswählen

 String$ = "This is a simple line...."
  
  Repeat
    Last = Position
    Debug FindString("PureBasic", "Bas") ; will display 5
  Position = FindString(String$ , "i", Position + 1)
  If Position > 0
    Debug "'>' found at position: " + Position
  EndIf
  Until Not Position
  
  Debug "Last position 'i' was found: " + Last
---------------------------------------------------------------------
Nochmals Danke und LG, Brigitte.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Extrahieren des reinen Textes aus einer HTML-Seite.

Beitrag von H.Brill »

Gerade dafür sind die regulären Ausdrücke ja gedacht.

Code: Alles auswählen

Define InHtml$ = ~"<li><p style=\"margin-bottom: 0cm;\">12-Gefährdung des Kindeswohl</p></li>\r\n" + 
                 ~"<li><p style=\"margin-bottom: 0cm;\">13-Eingeschränkte Erziehungskompetenz der Eltern</p></li>\r\n" + 
                 ~"<li><p style=\"margin-bottom: 0cm;\">14-Belastungen des jungen Menschen durch Problemlagen der Eltern</p></li>\r\n" +
                 ~"<li><p style=\"margin-bottom: 0cm;\">15-Belastungen des jungen Menschen durch familiäre Konflikte</p></li>\r\n" +
                 ~"<li><p style=\"margin-bottom: 0cm;\">16-Auffälligkeiten im sozialen Verhalten</p></li>"

If CreateRegularExpression(0, "[0-9]{2,}-[a-zA-Z|ä|ü|ö|ß|Ä|Ü|Ö ]{1,}")
  Dim Result$(0)
  NbFound = ExtractRegularExpression(0, InHtml$, Result$())
  For k = 0 To NbFound-1
       Debug Result$(k)
  Next
Else
    Debug RegularExpressionError()
EndIf
Must halt nur schauen, daß du keine exotischen Zeichen, wie z.b. § o. ä. in den normalen HTML- Text schreibst.
Ich habe dir oben schon die wichtigsten (ä,ü,ö,Ä,Ü,Ö,ß und das Blank) dazu geschrieben. Das Paragraphenzeichen und auch
weitere gibts du, wie oben mit einem Ampersand (|) -> ALT + 124 auf der Nummerntastatur an. Halt alles, wo er zusätzlich
greifen muß.

Wie du siehst, greife ich erst ab einer zweistelligen Zahl ab, da du vorher noch das hast : 0cm;
Nur mal so zum Verständnis.
PS: Und auch aufpassen, da die lib auch selber verschiedene Zeichen (Metazeichen) verwendet. So ist z.b. der Punkt (.), das Komma(,)
der Stern(*), das Fragezeichen ?, das Potenzzeichen ^, die Klammerpaare {}[]() reserviert. Wenn du auch nach denen suchen möchtest,
muß du sie mit einem Backslash \ maskieren.

Da lohnt es sich, die Hilfe mal dahingehend genau zu lesen.
PB 6.10
brigitte2018
Beiträge: 35
Registriert: 16.07.2018 11:14

Re: Extrahieren des reinen Textes aus einer HTML-Seite.

Beitrag von brigitte2018 »

Hallo und guten Tag,

eine reine Html-Datei soll so geordnet werden, dass Befehle von den sichtbaren Elementen getrennt sind und in eine Datei fließen, also fortlaufender Zähler und Text. Das nachstehende THEOS-Programm macht das. Jede Anmerkung dazu ist willkommen. Danke!

Code: Alles auswählen

REM HTML-Code aufbereiten - HT01.BASIC
REM
REM
REM Achtung!!! - CHR$(10)=Zeilenumbruch
REM Achtung!!! - CHR$(9)=Tabulatorsprung
REM
REM
     DIM aw$(10)
     DIM av$(10)
     DIM ax$(10)
     DIM ay$(20)
     DIM neu.key$(5000)
     DIM text.key$(5000)
REM
REM
REM
     OPTION PROMPT ""
     OPTION COMMA
     OPTION CASE "U"
REM
REM
REM
     COMMON ursprung$
     COMMON anzahl.vari%
REM
REM
REM
     sum$ = ""
     verzeichnis1$ = "/html/"
     verzeichnis2$ = "/bank/"
     platte$ = "d"
REM
REM
REM
     GOSUB bild.grund.maske.eins
     OPEN #1:"/bank/html0001.bank", UPDATE INDEXED
     OPEN #2:"/bank/bibelms2.bank", UPDATE INDEXED
     flag% = 0
     key.key$ = ""
     bemerkungen1$ = ""
     bemerkungen2$ = ""
     GOSUB auswahl.neu
     IF LEN(key.key$)<>0 THEN GOTO 450
     GOSUB auswahl
     GOSUB frage.namen
     IF flag%=1 THEN GOTO 380
REM
REM
REM
     ursprung$ = UCASE$(ursprung$)
     IF LEN(ursprung$)=0 THEN ursprung$ = "MICHA001"
     ursprung.datei$ = verzeichnis1$&LCASE$(ursprung$)&".html:d"
     ziel.datei1$ = verzeichnis1$&ursprung$&".ht1:d"
     ziel.datei2$ = verzeichnis1$&ursprung$&".ht2:d"
     ziel.datei3$ = verzeichnis1$&ursprung$&".ht3:d"
REM
REM
REM
teil0:
     lauf = 0
     OPEN #12:ursprung.datei$, INPUT SEQUENTIAL
     OPEN #13:ziel.datei1$, OUTPUT SEQUENTIAL
lesen:
     LINPUT #12:daten.satz$
     IF EOF(12) THEN GOTO ende.teil0
     r$ = TRIM$(daten.satz$)
     daten.satz$ = r$
     pruef1% = ASC(MID$(r$,1,1))
     IF pruef1%<21 THEN GOSUB falsche.zeichen
REM  berpr fen, ob unerlaubte Steuerzeichen
     sum$ = sum$&TRIM$(daten.satz$)
     lauf = lauf+1
     PRINT AT$(29,11);lauf
     GOTO lesen
ende.teil0:
     PRINT #13:sum$
     UNLOCK #13
     CLOSE #12
     CLOSE #13
REM
REM
REM
teil1:
     OPEN #12:ziel.datei1$, INPUT SEQUENTIAL
     OPEN #13:ziel.datei2$, OUTPUT SEQUENTIAL
REM
REM
REM
start:
     LINPUT #12:daten.satz$
     IF EOF(12) THEN GOTO ende.teil1
REM
REM
REM
eins:
     lauf = 0
     v1$ = "<"
     v2$ = ">"
     neu.daten.satz$ = daten.satz$
     start% = 1
eins.start:
     such.text$ = v1$
     GOSUB suchen.1
     IF neu.spalte%=0 THEN PRINT #13:nach$ \ GOTO ende.teil1
     start.zeichen% = neu.spalte%
     such.text$ = v2$
     GOSUB suchen.1
     stop.zeichen% = neu.spalte%
     laenge% = stop.zeichen%-start.zeichen%+1
     IF laenge%<2 THEN GOTO eins.start
     variabel.pruef$ = MID$(neu.daten.satz$,start.zeichen%,laenge%)
     vari$ = MID$(neu.daten.satz$,start.zeichen%-1,laenge%)
     vor$ = LEFT$(neu.daten.satz$,start.zeichen%-2)
     nach$ = RTRIM$(MID$(neu.daten.satz$,stop.zeichen%,LEN(neu.daten.satz$)-start.zeichen%))
     PRINT #13:vor$
     UNLOCK #13
     PRINT #13:vari$
     UNLOCK #13
     neu.daten.satz$ = nach$
     IF LEN(nach$)=0 THEN GOTO ende.teil1
     auf% = 1
     lauf = lauf+1
     PRINT AT$(29,12);lauf
     GOTO eins.start
ende.teil1:
     CLOSE #12
     CLOSE #13
REM
REM
REM
teil2:
     OPEN #12:ziel.datei2$, INPUT SEQUENTIAL
     OPEN #13:ziel.datei3$, OUTPUT SEQUENTIAL
start.teil2:
     LINPUT #12:daten.satz$
     IF EOF(12) THEN GOTO ende.teil2
     IF LEN(TRIM$(daten.satz$))=0 THEN GOTO 1340
     PRINT #13:daten.satz$
     UNLOCK #13
     GOTO start.teil2
ende.teil2:
     CLOSE #13
     CLOSE #12
REM
REM
REM
teil3:
     lauf = 0
     lauf.zwei = 0
     OPEN #12:ziel.datei3$, INPUT SEQUENTIAL
     OPEN #13:"/HTML/"&ursprung$&".TX1", OUTPUT SEQUENTIAL
     OPEN #14:"/HTML/"&ursprung$&".TX2", OUTPUT SEQUENTIAL
     OPEN #15:"/HTML/"&ursprung$&".TX3", OUTPUT SEQUENTIAL
     num% = 0
start.teil3:
     LINPUT #12:daten.satz$
     IF EOF(12) THEN GOTO ende.teil3
     IF LEN(TRIM$(daten.satz$))=0 THEN GOTO 1550
     pruef$ = ""
     IF LEN(TRIM$(daten.satz$))=1 THEN pruef$ = daten.satz$
     IF LEN(TRIM$(daten.satz$))=2 THEN pruef$ = daten.satz$
     IF ASC(pruef$)=10 THEN GOTO 1550
     IF ASC(pruef$)=9 THEN GOTO 1550
     IF ASC(LEFT$(daten.satz$,1))=9 THEN GOTO 1550
     num% = num%+1
     num$ = STR$(num%)
     p2% = LEN(num$)
     p1% = 4-p2%
     nummer$ = RPT$(p1%,"0")&num$
     x$ = RTRIM$(daten.satz$)
     PRINT #13:nummer$&":"&daten.satz$
     UNLOCK #13
     lauf = lauf+1
     pruef$ = TRIM$(daten.satz$)
     IF LEN(pruef$)=0 THEN GOTO anzeigenummer
     IF LEFT$(pruef$,1)="<" THEN GOTO anzeigenummer
     IF pruef$="&nbsp;" THEN GOTO anzeigenummer
     x$ = daten.satz$
     IF ASC(LEFT$(x$,1))=10 AND ASC(MID$(x$,2,1))=32 THEN GOTO anzeigenummer
     IF LEN(x$)=1 AND ASC(LEFT$(x$,1))=10 THEN GOTO anzeigenummer
     IF ASC(LEFT$(x$,1))=10 AND ASC(MID$(x$,2,1))=10 THEN GOTO anzeigenummer
     lauf.zwei = lauf.zwei+1
     lll$ = STR$(lauf.zwei)
     p2% = LEN(lll$)
     p1% = 5-p2%
     lauf.zwei$ = RPT$(p1%,"0")&lll$
     PRINT #15:lauf.zwei$&"."&nummer$&":"&daten.satz$
     UNLOCK #15
     PRINT #14:nummer$&":"&x$
     UNLOCK #14
anzeigenummer:
     PRINT AT$(29,13);nummer$
     GOTO start.teil3
ende.teil3:
     anzahl.vari% = num%
     WRITE #1,key$:bank.satz$
     UNLOCK #1
     FOR i% = 1 TO 15
          CLOSE #i%
          NEXT i%
     CHAIN "HT02"
REM
REM
REM
suchen.1:
     such.pruef$ = RTRIM$(such.text$)
     tttt$ = TRIM$(such.pruef$)
     such.text$ = "*?"&RTRIM$(such.pruef$)&"*?"
     IF auf%=0 THEN auf% = 1
     such.zeile$ = " "&neu.daten.satz$
     neu.spalte% = SCH(auf%,such.zeile$,such.pruef$)
     IF neu.spalte%>0 THEN spalte% = neu.spalte%
     auf% = neu.spalte%+LEN(such.pruef$)
ende.suchen.1:
     RETURN
REM
REM
REM
bild.grund.maske.eins:
     PRINT cldaten.satz$
     links.oben$ = CHR$(175)
     rechts.oben$ = CHR$(176)
     strich.lang$ = RPT$(75,CHR$(184))
     links.unten$ = CHR$(178)
     rechts.unten$ = CHR$(177)
     d.strich.vert$ = CHR$(185)
     oben$ = links.oben$&strich.lang$&rechts.oben$
     unten$ = links.unten$&strich.lang$&rechts.unten$
     zwischen$ = CHR$(180)&strich.lang$&CHR$(181)
REM
REM
REM
     FOR i% = 2 TO 22
          PRINT AT$(2,i%);d.strich.vert$
          PRINT AT$(78,i%);d.strich.vert$
          NEXT i%
REM
REM
REM
     PRINT AT$(1,1);CRT$("RVOFF");
     PRINT AT$(2,1);oben$
     PRINT AT$(2,3);zwischen$
     PRINT AT$(3,4);"HTML-Entwicklung"
     PRINT AT$(2,5);zwischen$
     PRINT AT$(3,6);"Formular-Version........ : ";
     PRINT AT$(3,7);"Dateiname (Ursprung).... : ";
     PRINT AT$(3,8);"Bemerkungen 1........... : ";
     PRINT AT$(3,9);"Bemerkungen 2........... : ";
     PRINT AT$(2,10);zwischen$
     PRINT AT$(3,11);"Ursprungszeile.........  : ";
     PRINT AT$(3,12);"Aktuelle Variable....... : ";
     PRINT AT$(3,13);"Variabeln-Nummer........ : ";
     PRINT AT$(3,14);"Zeilen-Nummer 1......... : ";
     PRINT AT$(3,15);"Zeilen-Nummer 2......... : ";
     PRINT AT$(3,16);"Zeilen-Nummer 3......... : ";
     PRINT AT$(3,17);"Zeilen-Nummer 4......... : ";
     PRINT AT$(3,18);"Zeilen-Nummer 5......... : ";
     PRINT AT$(3,19);"Zeilen-Nummer 6......... : ";
     PRINT AT$(3,20);"Zeilen-Nummer 7......... : ";
     PRINT AT$(2,21);zwischen$
     PRINT AT$(2,23);unten$
REM
REM
REM
     x$ = DATE$(0)
     datum$ = MID$(x$,1,2)&"."&MID$(x$,4,2)&"."&MID$(x$,9,2)
     otr$ = "*** OTR SOFTWARETECHNIK ***"
     l1 = LEN(otr$)
     l2 = 80-l1
     l2 = l2/2
     otr.position% = INT(l2)
     titel$ = " HTML-Code aufbereiten "
     l1 = LEN(titel$)
     l2 = 80-l1
     l2 = l2/2
     titel.position% = INT(l2)
     PRINT AT$(3,2);"HT01"
     PRINT AT$(titel.position%,2);titel$
     PRINT AT$(otr.position%,22);otr$
     PRINT AT$(70,2);datum$
     RETURN
REM
REM
REM
frage.namen:
     PRINT AT$(32,6);formular.nummer$
     PRINT AT$(32,7);ursprung$
     PRINT AT$(32,8);bemerkungen1$
     PRINT AT$(32,9);bemerkungen2$
     PRINT AT$(32,6);"00"
REM
REM
REM
anzeigenamen:
     PRINT AT$(32,7);
     LINPUT USING RPAD$(ursprung$,8),ursprung$
     IF INP=11 OR INP=25 OR INP=27 THEN flag% = 1
     IF flag%=1 THEN GOTO ende.frage.namen
     ursprung$ = TRIM$(ursprung$)
     IF LEN(ursprung$)<>8 THEN GOTO anzeigenamen
     key$ = ursprung$&".00"
     READ #1,key$:bank.satz$
     UNLOCK #1
     ursprung.html.datei.name$ = LEFT$(k$,8)
     bemerkungen1$ = MID$(bank.satz$,1,40)
     bemerkungen2$ = MID$(bank.satz$,41,40)
     numnum$ = MID$(bank.satz$,81,5)
     OPTION CASE "M"
REM
REM
REM
anzbemerkungen:
     PRINT AT$(32,8);
     LINPUT USING RPAD$(bemerkungen1$,40),bemerkungen1$
     IF INP=11 OR INP=25 OR INP=27 THEN GOTO anzeigenamen
REM
REM
REM
     PRINT AT$(32,9);
     LINPUT USING RPAD$(bemerkungen2$,40),bemerkungen2$
     IF INP=11 OR INP=25 OR INP=27 THEN GOTO anzbemerkungen
REM
REM
REM
     ursprung.html.datei.name$ = UCASE$(ursprung$)
     bank.satz$ = bemerkungen1$&RPT$(40-LEN(bemerkungen1$)," ")&bemerkungen2$&RPT$(40-LEN(bemerkungen2$)," ")&numnum$&RPT$(5-LEN(numnum$)," ")
     WRITE #1,key$:bank.satz$
     UNLOCK #1
ende.frage.namen:
     OPTION CASE "U"
     RETURN
REM
REM
REM
ausgang:
     CHAIN "PGMPP004"
REM
REM
REM
auswahl:
     WINDOW CLOSE 6
REM
REM
REM
auswahl.neu:
     neu% = 0
     key.key$ = ""
     CLEAR neu.key$
     lauf% = 1
     text.key$(lauf%) = "Neues Formular oder Direktzugriff"
lesen2:
     k$ = ""
     READ #1,k$:bank.satz$
     UNLOCK #1
     READNEXT #1,k$:bank.satz$
     UNLOCK #1
     IF LEN(k$)=0 THEN GOTO ende.auswahl.neu
     lauf% = lauf%+1
     neu.key$(lauf%) = k$
     text.key$(lauf%) = k$&": "&LEFT$(bank.satz$,40)
     GOTO lesen2
ende.auswahl.neu:
     neu.key% = lauf%
     WINDOW CHOICE KEEP 6,15,5,neu.key%,text.key$,wahl%; TITLE " Alle Formulare ", COLOR 7,0
     IF wahl%=0 THEN GOTO 3630
     IF wahl%=1 THEN neu% = 1 \ key.key$ = "" \ GOTO 3730
     key.key$ = neu.key$(wahl%)
     READ #1,key.key$:bank.satz$
     UNLOCK #1
     ursprung.html.datei.name$ = LEFT$(key.key$,8)
     bemerkungen1$ = MID$(bank.satz$,1,40)
     bemerkungen2$ = MID$(bank.satz$,41,40)
     ursprung$ = ursprung.html.datei.name$
     WINDOW CLOSE 6
     RETURN
REM
REM
REM
falsche.zeichen:
     pruef1% = ASC(MID$(r$,1,1))
     IF pruef1%>20 THEN GOTO ende.falsche.zeichen
     daten.satz$ = MID$(r$,2,LEN(r$)-1)
     r$ = daten.satz$
     GOTO falsche.zeichen
ende.falsche.zeichen:
     RETURN
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Extrahieren des reinen Textes aus einer HTML-Seite.

Beitrag von H.Brill »

Ist ja ziemlich alles BASIC - like.
Aber fehlt da noch was ?
Die ganzen numerischen Labels, die mit GOTO angesprungen werden sollen, wie 360, 450, 1550 usw.
fehlen in deinem Code. Es gibt ja auch Dialekte, die mit GOTO Zeilennummern anspringen, so wie das
alte GW-BASIC. Darum würde hier die 360 gerade noch so reinpassen, aber die höheren eben nicht mehr.

Ansonsten müßte man die GOTOs mit Proceduren ersetzen. Vereinzelte Stringoperationen müßte man
noch erforschen, was sie tun : z.b. AT$(), CRT$(), RPT$() die anderen Stringoperationen wären dann
an PB anzupassen wie Mid$() zu Mid() und dessen Parameter. Die Dateioperationen laufen ja auf sequentielles
Lesen/Schreiben raus, wo auch die PB-Lib File eine große Auswahl bietet. Ist halt nur nach PB umzusetzen.

Alles in allem ist viel Fleißarbeit nötig.
Wenn es dir Schwierigkeiten mit den Proceduren macht, kannst du auch weiterhin mit GOTO Label arbeiten.
PB unterstützt das ja auch noch. Bei fortgeschrittenem Wissen mit PB kannst du das dann noch immer die
GOTOs in Proceduren umschreiben. Du wirst auch sehen, daß es mit Proceduren viel übersichtlicher wird. Aber
erst einmal sollte es ja mal prinzipiell laufen.

Da ich beim Suchen von THEOS auch auf Brigitte2018 gestossen bin, denke ich mal, daß du schon einigermaßen
fit in PB bist. siehe :
viewtopic.php?t=32301
Ich denke, daß du das schon hinbekommst. Hast ja 2021 schon einiges erklärt bekommen.
PB 6.10
brigitte2018
Beiträge: 35
Registriert: 16.07.2018 11:14

Re: Extrahieren des reinen Textes aus einer HTML-Seite.

Beitrag von brigitte2018 »

Oh, sorry!
Ich habe ein nicht ganz überarbeitetes Programm überlassen. GOTO label statt got Zeilen-Nummer. Hier das komplette Programm in der ursprünglichen Fassung:

Code: Alles auswählen

 10 REM HTML-Code aufbereiten - HT01.BASIC
    20 REM
    30 REM
    40 REM Achtung!!! - CHR$(10)=Zeilenumbruch
    50 REM Achtung!!! - CHR$(9)=Tabulatorsprung
    60 REM
    70 REM
    80      DIM aw$(10)
    90      DIM av$(10)
   100      DIM ax$(10)
   110      DIM ay$(20)
   120      DIM neu.key$(5000)
   130      DIM text.key$(5000)
   140 REM
   150 REM
   160 REM
   170      OPTION PROMPT ""
   180      OPTION COMMA
   190      OPTION CASE "U"
   200 REM
   210 REM
   220 REM
   230      COMMON ursprung$
   240      COMMON anzahl.vari%
   250 REM
   260 REM
   270 REM
   280      sum$ = ""
   290      verzeichnis1$ = "/html/"
   300      verzeichnis2$ = "/bank/"
   310      platte$ = "d"
   320 REM
   330 REM
   340 REM
   350      GOSUB bild.grund.maske.eins
   360      OPEN #1:"/bank/html0001.bank", UPDATE INDEXED
   370      OPEN #2:"/bank/bibelms2.bank", UPDATE INDEXED
   380      flag% = 0
   390      key.key$ = ""
   400      bemerkungen1$ = ""
   410      bemerkungen2$ = ""
   420      GOSUB auswahl.neu
   430      IF LEN(key.key$)<>0 THEN GOTO 450
   440      GOSUB auswahl
   450      GOSUB frage.namen
   460      IF flag%=1 THEN GOTO 380
   470 REM
   480 REM
   490 REM
   500      ursprung$ = UCASE$(ursprung$)
   510      IF LEN(ursprung$)=0 THEN ursprung$ = "MICHA001"
   520      ursprung.datei$ = verzeichnis1$&LCASE$(ursprung$)&".html:d"
   530      ziel.datei1$ = verzeichnis1$&ursprung$&".ht1:d"
   540      ziel.datei2$ = verzeichnis1$&ursprung$&".ht2:d"
   550      ziel.datei3$ = verzeichnis1$&ursprung$&".ht3:d"
   560 REM
   570 REM
   580 REM
   590 teil0:
   600      lauf = 0
   610      OPEN #12:ursprung.datei$, INPUT SEQUENTIAL
   620      OPEN #13:ziel.datei1$, OUTPUT SEQUENTIAL
   630 lesen:
   640      LINPUT #12:daten.satz$
   650      IF EOF(12) THEN GOTO ende.teil0
   660      r$ = TRIM$(daten.satz$)
   670      daten.satz$ = r$
   680      pruef1% = ASC(MID$(r$,1,1))
   690      IF pruef1%<21 THEN GOSUB falsche.zeichen
   700 REM  berpr fen, ob unerlaubte Steuerzeichen
   710      sum$ = sum$&TRIM$(daten.satz$)
   720      lauf = lauf+1
   730      PRINT AT$(29,11);lauf
   740      GOTO lesen
   750 ende.teil0:
   760      PRINT #13:sum$
   770      UNLOCK #13
   780      CLOSE #12
   790      CLOSE #13
   800 REM
   810 REM
   820 REM
   830 teil1:
   840      OPEN #12:ziel.datei1$, INPUT SEQUENTIAL
   850      OPEN #13:ziel.datei2$, OUTPUT SEQUENTIAL
   860 REM
   870 REM
   880 REM
   890 start:
   900      LINPUT #12:daten.satz$
   910      IF EOF(12) THEN GOTO ende.teil1
   920 REM
   930 REM
   940 REM
   950 eins:
   960      lauf = 0
   970      v1$ = "<"
   980      v2$ = ">"
   990      neu.daten.satz$ = daten.satz$
  1000      start% = 1
  1010 eins.start:
  1020      such.text$ = v1$
  1030      GOSUB suchen.1
  1040      IF neu.spalte%=0 THEN PRINT #13:nach$ \ GOTO ende.teil1
  1050      start.zeichen% = neu.spalte%
  1060      such.text$ = v2$
  1070      GOSUB suchen.1
  1080      stop.zeichen% = neu.spalte%
  1090      laenge% = stop.zeichen%-start.zeichen%+1
  1100      IF laenge%<2 THEN GOTO eins.start
  1110      variabel.pruef$ = MID$(neu.daten.satz$,start.zeichen%,laenge%)
  1120      vari$ = MID$(neu.daten.satz$,start.zeichen%-1,laenge%)
  1130      vor$ = LEFT$(neu.daten.satz$,start.zeichen%-2)
  1140      nach$ = RTRIM$(MID$(neu.daten.satz$,stop.zeichen%,LEN(neu.daten.satz$)-start.zeichen%))
  1150      PRINT #13:vor$
  1160      UNLOCK #13
  1170      PRINT #13:vari$
  1180      UNLOCK #13
  1190      neu.daten.satz$ = nach$
  1200      IF LEN(nach$)=0 THEN GOTO ende.teil1
  1210      auf% = 1
  1220      lauf = lauf+1
  1230      PRINT AT$(29,12);lauf
  1240      GOTO eins.start
  1250 ende.teil1:
  1260      CLOSE #12
  1270      CLOSE #13
  1280 REM
  1290 REM
  1300 REM
  1310 teil2:
  1320      OPEN #12:ziel.datei2$, INPUT SEQUENTIAL
  1330      OPEN #13:ziel.datei3$, OUTPUT SEQUENTIAL
  1340 start.teil2:
  1350      LINPUT #12:daten.satz$
  1360      IF EOF(12) THEN GOTO ende.teil2
  1370      IF LEN(TRIM$(daten.satz$))=0 THEN GOTO 1340
  1380      PRINT #13:daten.satz$
  1390      UNLOCK #13
  1400      GOTO start.teil2
  1410 ende.teil2:
  1420      CLOSE #13
  1430      CLOSE #12
  1440 REM
  1450 REM
  1460 REM
  1470 teil3:
  1480      lauf = 0
  1490      lauf.zwei = 0
  1500      OPEN #12:ziel.datei3$, INPUT SEQUENTIAL
  1510      OPEN #13:"/HTML/"&ursprung$&".TX1", OUTPUT SEQUENTIAL
  1520      OPEN #14:"/HTML/"&ursprung$&".TX2", OUTPUT SEQUENTIAL
  1530      OPEN #15:"/HTML/"&ursprung$&".TX3", OUTPUT SEQUENTIAL
  1540      num% = 0
  1550 start.teil3:
  1560      LINPUT #12:daten.satz$
  1570      IF EOF(12) THEN GOTO ende.teil3
  1580      IF LEN(TRIM$(daten.satz$))=0 THEN GOTO 1550
  1590      pruef$ = ""
  1600      IF LEN(TRIM$(daten.satz$))=1 THEN pruef$ = daten.satz$
  1610      IF LEN(TRIM$(daten.satz$))=2 THEN pruef$ = daten.satz$
  1620      IF ASC(pruef$)=10 THEN GOTO 1550
  1630      IF ASC(pruef$)=9 THEN GOTO 1550
  1640      IF ASC(LEFT$(daten.satz$,1))=9 THEN GOTO 1550
  1650      num% = num%+1
  1660      num$ = STR$(num%)
  1670      p2% = LEN(num$)
  1680      p1% = 4-p2%
  1690      nummer$ = RPT$(p1%,"0")&num$
  1700      x$ = RTRIM$(daten.satz$)
  1710      PRINT #13:nummer$&":"&daten.satz$
  1720      UNLOCK #13
  1730      lauf = lauf+1
  1740      pruef$ = TRIM$(daten.satz$)
  1750      IF LEN(pruef$)=0 THEN GOTO anzeigenummer
  1760      IF LEFT$(pruef$,1)="<" THEN GOTO anzeigenummer
  1770      IF pruef$="&nbsp;" THEN GOTO anzeigenummer
  1780      x$ = daten.satz$
  1790      IF ASC(LEFT$(x$,1))=10 AND ASC(MID$(x$,2,1))=32 THEN GOTO anzeigenummer
  1800      IF LEN(x$)=1 AND ASC(LEFT$(x$,1))=10 THEN GOTO anzeigenummer
  1810      IF ASC(LEFT$(x$,1))=10 AND ASC(MID$(x$,2,1))=10 THEN GOTO anzeigenummer
  1820      lauf.zwei = lauf.zwei+1
  1830      lll$ = STR$(lauf.zwei)
  1840      p2% = LEN(lll$)
  1850      p1% = 5-p2%
  1860      lauf.zwei$ = RPT$(p1%,"0")&lll$
  1870      PRINT #15:lauf.zwei$&"."&nummer$&":"&daten.satz$
  1880      UNLOCK #15
  1890      PRINT #14:nummer$&":"&x$
  1900      UNLOCK #14
  1910 anzeigenummer:
  1920      PRINT AT$(29,13);nummer$
  1930      GOTO start.teil3
  1940 ende.teil3:
  1950      anzahl.vari% = num%
  1960      WRITE #1,key$:bank.satz$
  1970      UNLOCK #1
  1980      FOR i% = 1 TO 15
  1990           CLOSE #i%
  2000           NEXT i%
  2010      CHAIN "HT02"
  2020 REM
  2030 REM
  2040 REM
  2050 suchen.1:
  2060      such.pruef$ = RTRIM$(such.text$)
  2070      tttt$ = TRIM$(such.pruef$)
  2080      such.text$ = "*?"&RTRIM$(such.pruef$)&"*?"
  2090      IF auf%=0 THEN auf% = 1
  2100      such.zeile$ = " "&neu.daten.satz$
  2110      neu.spalte% = SCH(auf%,such.zeile$,such.pruef$)
  2120      IF neu.spalte%>0 THEN spalte% = neu.spalte%
  2130      auf% = neu.spalte%+LEN(such.pruef$)
  2140 ende.suchen.1:
  2150      RETURN
  2160 REM
  2170 REM
  2180 REM
  2190 bild.grund.maske.eins:
  2200      PRINT cldaten.satz$
  2210      links.oben$ = CHR$(175)
  2220      rechts.oben$ = CHR$(176)
  2230      strich.lang$ = RPT$(75,CHR$(184))
  2240      links.unten$ = CHR$(178)
  2250      rechts.unten$ = CHR$(177)
  2260      d.strich.vert$ = CHR$(185)
  2270      oben$ = links.oben$&strich.lang$&rechts.oben$
  2280      unten$ = links.unten$&strich.lang$&rechts.unten$
  2290      zwischen$ = CHR$(180)&strich.lang$&CHR$(181)
  2300 REM
  2310 REM
  2320 REM
  2330      FOR i% = 2 TO 22
  2340           PRINT AT$(2,i%);d.strich.vert$
  2350           PRINT AT$(78,i%);d.strich.vert$
  2360           NEXT i%
  2370 REM
  2380 REM
  2390 REM
  2400      PRINT AT$(1,1);CRT$("RVOFF");
  2410      PRINT AT$(2,1);oben$
  2420      PRINT AT$(2,3);zwischen$
  2430      PRINT AT$(3,4);"HTML-Entwicklung"
  2440      PRINT AT$(2,5);zwischen$
  2450      PRINT AT$(3,6);"Formular-Version........ : ";
  2460      PRINT AT$(3,7);"Dateiname (Ursprung).... : ";
  2470      PRINT AT$(3,8);"Bemerkungen 1........... : ";
  2480      PRINT AT$(3,9);"Bemerkungen 2........... : ";
  2490      PRINT AT$(2,10);zwischen$
  2500      PRINT AT$(3,11);"Ursprungszeile.........  : ";
  2510      PRINT AT$(3,12);"Aktuelle Variable....... : ";
  2520      PRINT AT$(3,13);"Variabeln-Nummer........ : ";
  2530      PRINT AT$(3,14);"Zeilen-Nummer 1......... : ";
  2540      PRINT AT$(3,15);"Zeilen-Nummer 2......... : ";
  2550      PRINT AT$(3,16);"Zeilen-Nummer 3......... : ";
  2560      PRINT AT$(3,17);"Zeilen-Nummer 4......... : ";
  2570      PRINT AT$(3,18);"Zeilen-Nummer 5......... : ";
  2580      PRINT AT$(3,19);"Zeilen-Nummer 6......... : ";
  2590      PRINT AT$(3,20);"Zeilen-Nummer 7......... : ";
  2600      PRINT AT$(2,21);zwischen$
  2610      PRINT AT$(2,23);unten$
  2620 REM
  2630 REM
  2640 REM
  2650      x$ = DATE$(0)
  2660      datum$ = MID$(x$,1,2)&"."&MID$(x$,4,2)&"."&MID$(x$,9,2)
  2670      otr$ = "*** OTR SOFTWARETECHNIK ***"
  2680      l1 = LEN(otr$)
  2690      l2 = 80-l1
  2700      l2 = l2/2
  2710      otr.position% = INT(l2)
  2720      titel$ = " HTML-Code aufbereiten "
  2730      l1 = LEN(titel$)
  2740      l2 = 80-l1
  2750      l2 = l2/2
  2760      titel.position% = INT(l2)
  2770      PRINT AT$(3,2);"HT01"
  2780      PRINT AT$(titel.position%,2);titel$
  2790      PRINT AT$(otr.position%,22);otr$
  2800      PRINT AT$(70,2);datum$
  2810      RETURN
  2820 REM
  2830 REM
  2840 REM
  2850 frage.namen:
  2860      PRINT AT$(32,6);formular.nummer$
  2870      PRINT AT$(32,7);ursprung$
  2880      PRINT AT$(32,8);bemerkungen1$
  2890      PRINT AT$(32,9);bemerkungen2$
  2900      PRINT AT$(32,6);"00"
  2910 REM
  2920 REM
  2930 REM
  2940 anzeigenamen:
  2950      PRINT AT$(32,7);
  2960      LINPUT USING RPAD$(ursprung$,8),ursprung$
  2970      IF INP=11 OR INP=25 OR INP=27 THEN flag% = 1
  2980      IF flag%=1 THEN GOTO ende.frage.namen
  2990      ursprung$ = TRIM$(ursprung$)
  3000      IF LEN(ursprung$)<>8 THEN GOTO anzeigenamen
  3010      key$ = ursprung$&".00"
  3020      READ #1,key$:bank.satz$
  3030      UNLOCK #1
  3040      ursprung.html.datei.name$ = LEFT$(k$,8)
  3050      bemerkungen1$ = MID$(bank.satz$,1,40)
  3060      bemerkungen2$ = MID$(bank.satz$,41,40)
  3070      numnum$ = MID$(bank.satz$,81,5)
  3080      OPTION CASE "M"
  3090 REM
  3100 REM
  3110 REM
  3120 anzbemerkungen:
  3130      PRINT AT$(32,8);
  3140      LINPUT USING RPAD$(bemerkungen1$,40),bemerkungen1$
  3150      IF INP=11 OR INP=25 OR INP=27 THEN GOTO anzeigenamen
  3160 REM
  3170 REM
  3180 REM
  3190      PRINT AT$(32,9);
  3200      LINPUT USING RPAD$(bemerkungen2$,40),bemerkungen2$
  3210      IF INP=11 OR INP=25 OR INP=27 THEN GOTO anzbemerkungen
  3220 REM
  3230 REM
  3240 REM
  3250      ursprung.html.datei.name$ = UCASE$(ursprung$)
  3260      bank.satz$ = bemerkungen1$&RPT$(40-LEN(bemerkungen1$)," ")&bemerkungen2$&RPT$(40-LEN(bemerkungen2$)," ")&numnum$&RPT$(5-LEN(numnum$)," ")
  3270      WRITE #1,key$:bank.satz$
  3280      UNLOCK #1
  3290 ende.frage.namen:
  3300      OPTION CASE "U"
  3310      RETURN
  3320 REM
  3330 REM
  3340 REM
  3350 ausgang:
  3360      CHAIN "PGMPP004"
  3370 REM
  3380 REM
  3390 REM
  3400 auswahl:
  3410      WINDOW CLOSE 6
  3420 REM
  3430 REM
  3440 REM
  3450 auswahl.neu:
  3460      neu% = 0
  3470      key.key$ = ""
  3480      CLEAR neu.key$
  3490      lauf% = 1
  3500      text.key$(lauf%) = "Neues Formular oder Direktzugriff"
  3510 lesen2:
  3520      k$ = ""
  3530      READ #1,k$:bank.satz$
  3540      UNLOCK #1
  3550      READNEXT #1,k$:bank.satz$
  3560      UNLOCK #1
  3570      IF LEN(k$)=0 THEN GOTO ende.auswahl.neu
  3580      lauf% = lauf%+1
  3590      neu.key$(lauf%) = k$
  3600      text.key$(lauf%) = k$&": "&LEFT$(bank.satz$,40)
  3610      GOTO lesen2
  3620 ende.auswahl.neu:
  3630      neu.key% = lauf%
  3640      WINDOW CHOICE KEEP 6,15,5,neu.key%,text.key$,wahl%; TITLE " Alle Formulare ", COLOR 7,0
  3650      IF wahl%=0 THEN GOTO 3630
  3660      IF wahl%=1 THEN neu% = 1 \ key.key$ = "" \ GOTO 3730
  3670      key.key$ = neu.key$(wahl%)
  3680      READ #1,key.key$:bank.satz$
  3690      UNLOCK #1
  3700      ursprung.html.datei.name$ = LEFT$(key.key$,8)
  3710      bemerkungen1$ = MID$(bank.satz$,1,40)
  3720      bemerkungen2$ = MID$(bank.satz$,41,40)
  3730      ursprung$ = ursprung.html.datei.name$
  3740      WINDOW CLOSE 6
  3750      RETURN
  3760 REM
  3770 REM
  3780 REM
  3790 falsche.zeichen:
  3800      pruef1% = ASC(MID$(r$,1,1))
  3810      IF pruef1%>20 THEN GOTO ende.falsche.zeichen
  3820      daten.satz$ = MID$(r$,2,LEN(r$)-1)
  3830      r$ = daten.satz$
  3840      GOTO falsche.zeichen
  3850 ende.falsche.zeichen:
  3860      RETURN
-----
Ich habe halt Jahre nichts machen können und traue mir nicht mehr viel zu. Früher, ja früher, da habe ich ganz anders agieren können und anderen erklärt, dass man nicht meinen sollte, codieren sei programmieren. Nun ja: vorbei ist vorbei. Ich weiß ja der Schlüssel zur Problemlösung sind der KEY "<" und ">". Sie sind der Clou, das eigentliche 'know how', produzieren seit 20 Jahren fehlerlose HTML-Seiten und Drucke.

Nochmals Danke für Deine Bemühungen und ein schönes Wochende, Brigitte.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Extrahieren des reinen Textes aus einer HTML-Seite.

Beitrag von H.Brill »

Liebe Brigitte.
Aber sowas hält doch geistig fit. Ich bin auch schon 65 und manchmal juckt es mir in den
Fingern, nochmal was neues zu programmieren.
Wenn dir PB für den Anfang zu schwierig ist, probier es doch mal mit (X) Profan (www.profan.de)
Dort gibt es ja auch eine kostenlose Freewareversion mit Compiler, die für dein Vorhaben mehr
als ausreicht.

Da hast du gleich mit CLS ein Fenster und GOTO beherrscht es ebenfalls noch. Die PB-Gemeinde
möge mir hier verzeihen, aber da ich aus den 2 Welten (PB + XProfan) komme, finde ich Profan
für den Einstieg etwas leichter. Ich selber hatte vor 30 Jahren mit Profan angefangen und mich,
als PB rauskam, auch daran gewagt. Das Umdenken von Profan nach PB hat mir anfangs auch so
manches Kopfzerbrechen bereitet. Von daher kann ich auch sagen, daß Profan etwas leichter ist.
Da könnte ich dir auch besser helfen, da ich mit Profan mir öfter mal kleine Tools mache.

Ansonsten ist natürlich PB die bessere Wahl.

Egal, was du nun benutzt, setz dich einfach mal ran ud du wirst sehen, daß es auch
Spaß machen kann.
PB 6.10
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Extrahieren des reinen Textes aus einer HTML-Seite.

Beitrag von H.Brill »

Also, wie ich das sehe, ist dein Code mit 3860 Zeilen doch recht lang.
Auch noch, wenn man die etlichen REMs (Kommentare) abzieht.
Es geht ja in der Hauptsache darum einen Text zwischen 2 spitzen Klammern
auszufiltern z.b.
12-Gefährdung des Kindeswohl

Diese Texte sollen dann in eine separate Textdatei reingeschrieben werden.
Ob jetzt immer in eine neue Textdatei oder als Append drangehängt oder
Nummer (hier 12) mit neuem Text ersetzen, ist erstmal zweitrangig.

Da wäre es in der Tat besser, ganz neu anzufangen. Die Zeit, die du brauchst,
obigen Code 1:1 zu PB zu konvertieren, wird wesentlich länger sein. Obendrein
sollen dann später auch noch die GOTOs durch Proceduren ersetzt werden, was
dann auch noch zusätzliche Zeit erfordert.

Der Code des Multiuser-Basic vom THEOS-Systems ist ja auch deshalb mit den vielen
normalen Stringbefehlen, wie Left$(), Mid$() usw. aufgebläht, da das System keine
Regulären Ausdrücke kennt.

Ich kenne das nur zu gut, als ich in den Anfang Neunziger Jahre eine Messwerte-Datei
von einem Messgerät von meinem Bruder bekommen hatte. Da hatte ich auch mit
GW-Basic zwei Wochen lang gebastelt, um 2 Messwerte + Datum/Zeit aus jeweils
einer Zeile zu extrahieren und diese in eine neue Datei zu schreiben. Die Werte
standen dummerweise nicht immer an den gleichen Stellen. Trotzdem war es noch
effektiv, denn vorher mußte sich jemand hinsetzen, um mit einem einfachen Editor
die Daten rauszufrickeln. Der saß dann auch jeweils einige Tage daran. Dank meines
Programms war das nachher nur noch eine Sekundensache.

Heute würde ich darüber lachen und hätte es in einem Tag dank regulärer Ausdrücke
fertig.

Um dir mal ein einfaches Beispiel zu geben :

"Heinz hat im Mittwochslotto 10 € und im Samstagslotto 20 € gewonnen"
"Brigitte hat im Mittwochslotto 0 € und im Samstagslotto 40 € gewonnen"

Jetzt versuche mal, mit deinen normalen Stringbefehlen, wie Mid$(), Left$() usw.
die Namen und die Gewinnbeträge rauszufiltern. Und dann mache das mal mit
den RegularExpression von PB. So etwa :

Code: Alles auswählen

Dim Saetze$(2)
Saetze$(0) = "Heinz    hat im Mittwochslotto 10 € und im Samstagslotto 20 € gewonnen"
Saetze$(1) = "Brigitte hat im Mittwochslotto 0 € und im Samstagslotto 40 € gewonnen"
If CreateRegularExpression(0, "[0-9]{1,}")
  For k = 0 To 1
    If ExamineRegularExpression(0, Saetze$(k))
      While NextRegularExpressionMatch(0)
        Debug  Left(Saetze$(k), 9) + "   :   " + "Gewinn : " + RegularExpressionMatchString(0) + " €          Position : " + Str(RegularExpressionMatchPosition(0)) + "          Stellen : " +  Str(RegularExpressionMatchLength(0))
      Wend  
    EndIf  
  Next
Else
    Debug RegularExpressionError()
EndIf

Da wirst schnell erkennen, daß du bei den reg. Ausdrücken wesentlich weniger
Schreibarbeit und Zeitaufwand hast.

Wenn du einmal die Nutzung der regulären Ausdrücke begriffen hast, wirst du
sie später lieben.
Zuletzt geändert von H.Brill am 11.11.2023 11:30, insgesamt 1-mal geändert.
PB 6.10
Antworten