Deutsch
Forum

Großbuchstaben in einem Textstring suchen

 

Thomas
Freier
Ich habe mal eine Frage, wie ist das folgende Problem besser (schneller) zu lösen:
In einer Textdatei, erzeugt von einer PDF durch Adobe oder PDFtoText.exe, werden Worte zusammengezogen. Diese würde ich gerne wieder trennen, wenn innerhalb eines Wortes Großbuchstaben auftauchen. Ist eine Vorbereitung für die Sprachausgabe und es hört sich nicht gut an, wenn vor einem Hauptwort kein Leerzeichen ist. Meine bisherige Lösung:
KompilierenMarkierenSeparieren
Zusammengefasste Wörter bei einem Großbuchstaben trennen
Dim$ 500
declare this$, insideThis$, Nr_B%, Nr_B1%, Such$ , Such%, Edit$, N_Strg%, Ende%

Proc isOneInside   von Michael Wodrich

    Syntax: isOneInsice( this$, insideThis$ )
    Ist eines der Zeichen in this auch in insideThis enthalten?
    this wird als eine Aufzaehlung von einzelnen Zeichen betrachtet.
    Parameters this$, insideThis$
    Declare Ok%

    WhileLoop Len(this$)

        If InStr(Mid$(this$, &loop, 1), insideThis$)

            If &Loop>Nr_B1%

                Ok% = 1
                Nr_B% = &Loop
                BREAK

            EndIf

        EndIf

    EndWhile

    Return Ok%

EndProc

cls
Edit$=WastutLübeckaufdemReisemarktHeute ohneTourismusmanager
Print Edit$
insideThis$=ABCDEFGHIJKLMNOPQRSTUVWXYZÄÜÖ
..............Alle Worte trennen und speichern

WhileLoop 50

    List$ &Loop = Substr$(Edit$,&Loop, )

    IF List$(&Loop) =

        N_Strg%= &Loop-1
        Break

    EndIf

EndWhile

.............ist innerhalb eines Wortes ein Großbuchstabe?

WhileLoop n_Strg%

    Such$= List$(&Loop)
    print such$
    this$= right$(Such$,len(Such$)-1)
    Nr_B1% = 0
    ..........................suchen ab Wortanfang ohne 1. Buchstaben

    WhileLoop 10

        if isOneInside( this$, insideThis$ )

            Such$= Ins$( ,Such$,(Nr_B% + 1)) gefunden und Leerzeichen vor Großbuchstaben
            Nr_B1% = Nr_B% + 1                 einsetzen
            this$= right$(Such$,len(Such$)-1)

        Else

            Break

        endif

    Wend

    print such$
    Print
    List$ &Loop = Such$

EndWhile

Print
.............String neu zusammen setzen
Edit$ =

WhileLoop n_Strg%

    Edit$ = Edit$ + List$(&Loop)+

EndWhile

print Edit$
WaitKey
 
Gruß Thomas
Windows XP SP2, XProfan X2
21.11.2007  
 




Jörg
Sellmeyer
So zum Beispiel:
KompilierenMarkierenSeparieren
ab XProfan10
Declare t$
Var Edit$=WastutLübeckinÖstereichaufdemReisemarktHeuteohneTourismusmanager
Print Edit$

While Match$(([a-z|äöü])([A-Z|ÄÖÜ]),Edit$) >

    t$ = $Match
    Edit$ = Translate$(Edit$,t$,Left$(t$,1) +   + Right$(t$,1))

Wend

Print Edit$
WaitInput

KompilierenMarkierenSeparieren
Auf die gleiche Weise kannst Du noch die ganzen Präpositionen und Bindewörter freistellen und Du hast schon einen halbwegs lesbaren Text. Wenn Du dann noch alle Möglichkeiten von sein und haben sowie einige Basisverben (z.B. machen) erledigst...
Achja, die Artikel noch! Mit dem richtigen Match$-Befehle geht das alles in einer Schleife.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
21.11.2007  
 




Thomas
Freier
@ Jörg, DANKE, sieht kurz und gut aus.
 
Gruß Thomas
Windows XP SP2, XProfan X2
21.11.2007  
 




Jörg
Sellmeyer
Thomas Freier
@ Jörg, DANKE, sieht kurz und gut aus.


Es ist kurz und gut
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
21.11.2007  
 




Jörg
Sellmeyer
Hallo Thomas,
Ich antworte mal hier, dann haben alle was davon:
Trennstriche am Zeilenende lassen sich leicht mit Translate$(Text$,-
,) herausfiltern.
Du kannst Deinen Text sogar gleich in Absätze zerlegen:
KompilierenMarkierenSeparieren
Jetzt hast Du im Prinzip absatzformatierten Fließtext. Den kannst Du jetzt dem Vorleseprogramm übergeben, oder, wenn Deine Frau gerne selber lesen möchte, in beliebiger Schriftgröße in einem Multiedit unterbringen. Mit eingestelltem automatischem Zeilenumbruch (negativer Wert für Höhe) sollte das dann problemlos lesbar sein. In einem RTF-Control kannst Du es sogar noch beliebig formatieren.
Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
22.11.2007  
 



Hm, wäre imho etwas performanter da ohne regexp und ohne schleifen auch mit
KompilierenMarkierenSeparieren
var in$=Hier_die_Funktion_die_den_Text_aus_PDF_liest()
in$=translate$(in$,-
,)
in$=translate$(in$,|,chr$(1))
in$=translate$(in$,!
,!|)
in$=translate$(in$,?
,?|)
in$=translate$(in$,.
,.|)
in$=translate$(in$,
,)
in$=translate$(in$,|,
) ich würde hier wahrscheinlich der Optik halber sogar
angeben, unwichtig...
in$=translate$(in$,chr$(1),|)
print in$

gegangen. Da ichs hier in das Communityedit getippt habe kann sich aber sicher ein Fehlerchen eingeschlichen haben.

Interessanterweise gleiche Anzahl von Zeilen. *g* Wohlmöglich wäre es also sogar noch ein Stück schneller wenn man diese Zeilen zu einer einzigen zusammenfasst.
 
23.11.2007  
 




Jörg
Sellmeyer
Obs schneller ist, käme auf einen Versuch an. Meine erste Schleife wird ja auch nur maximal 3mal durchlaufen. Wenn z.B kein ?
im Text vorhanden ist, sogar nur 2mal.
Die zweite Schleife kann man sich sowieso schenken. War ein Denkfehler meinerseits.
KompilierenMarkierenSeparieren
Translate$(Text$,|,
)

reicht ja schon.
Womit ich dann bei fünf Zeilen bin und evtl. weniger Durchläufen.
Außerdem finde ich diese RegEx-Sachen irgendwie cool
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
23.11.2007  
 



ok, testen! Steilvorlage für ein TestSkelett: [...]  (einfach in die perfproc das eintragen was zu testen ist)

Wäre doch echt interessant...

Aber der Coolnessfaktor ist tatsächlich unübersehbar.
 
23.11.2007  
 




Thomas
Freier
Toll!!! Ihr seid schneller als der Schall. Vorhin war hier Stille und ich habe mich auf die Suche nach Software gemacht. Werde die Tips morgen ausprobieren.
Jörg du hast recht, es sind Probleme, die viele interessieren könnten.
 
Gruß Thomas
Windows XP SP2, XProfan X2
23.11.2007  
 




Thomas
Freier
So, ich mußte es doch noch ausprobieren. Entweder mach ich einen Fehler, oder meine Lösung hat die wenigsten.
Anstoß der Aktion: der Versuch, Eine Zeitungsseite als PDF erhältlich, sich vorlesen zu lassen. Die ganze Seite ist kein Problem, dass kann Adobe auch. Aber möchte ich nur einen Artikel lesen oder noch einmal vorlesen lassen, so geht das nicht. Und wer möchte schon alle Anzeigen hören!
In der Anwendung kann das Programm nur über die Tasten gesteuert werden bis zu Scannen, aber soweit bin ich noch nicht.
Zum Einsatz kommt ein alter Laptop mit 800*600 Auflösung.
Im Anhang auch eine von Adobe erzeugte Textdatei (LN-Adobe.txt). Wobei Adobe eine fehlende Struktur, bei der Zeitung wußten die gar nicht was darunter zu verstehen ist, bemängelt und dann zeilenweise über mehrere Blöcke den Text erzeugt. Grrrrr!

1.345 kB
Hochgeladen:23.11.2007
Ladeanzahl114
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
23.11.2007  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.470 Betrachtungen

Unbenanntvor 0 min.
RudiB.26.04.2022
Ostfriesenjack11.08.2021
Georg Teles07.07.2021
Erasmus.Herold09.10.2019
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Thomas Freier (4x)
Jörg Sellmeyer (4x)
iF (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie