Autor Beitrag
Ja-Pa
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 458

Win XP, Suse 9.3
D1, D3, D5 Std, D7 Pro, D2005 Pers, Kylix 3
BeitragVerfasst: So 25.01.04 14:51 
Hallo an alle,

ich hab mal wieder ein Problem :wink:
Und zwar möchte ich Zahlen wie 16:10 Uhr in ausgeschriebenen Text umformen, also zu sechzehn Uhr zehn.

Die Zahlen auszuschreiben ist kein Problem, allerdings möchte ich meinem Programm beibringen, den Text vor und hinter den Zahlen zu erkennen, sodass der Text richtig umgeformt wird.
Damit meine ich, dass 16:10 in verschiedenen Sätzen unterschiedliche Bedeutungen haben kann:

Um 16:10 Uhr ging ich spazieren...
Rechnen Sie zuerst 16:10 und dann...
Es waren 16: 10 Frauen und 6 Männer...

Wenn dann die Bedeutung erkannt worden ist, muss der Doppelpunkt richtig umgeformt werden usw...

Ein anderes Beispiel ist 16,10 € und 16,10 l Wasser oder am 16.10.2003...
Für alle diese Aufgaben muss ich erkennen, wo im Text Zahlen stehen.
Das heißt, wenn man den Sinn erkennen möchte, ist es ist egal ob da jetzt 16:10 Uhr oder 17:12 Uhr steht.

Es gibt also folgende Probleme:
1. Erkennen von Zahlen im Text, in/um die Schlüsselwörter wie : oder € stehen.
2. Erkennen des "Sinns", also analysieren des Textes herum.
3. Den Text so umzuschreiben, dass (nur) das oben erkannte Schema ersetzt wird.

Und mit Stringbearbeitung kenne ich mich nicht so besonders aus :)
Ich würde mich daher freuen, wenn mir jemand helfen kann. :beer:

Gruß, Ja-Pa

_________________
Der Autor dieses Textes haftet nicht für Schäden an Soft- oder Hardware
oder Vermögensschäden, die durch das Benutzen des Textes entstehen.
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: So 25.01.04 15:05 
Hm - sowas hatte ich mal als Hausaufgabe in C++ *lol*

Identifizieren der Zeichen und Zahlen empfehle ich Pos und PosEx, die Umwandlung Zahlen in ausgeschriebenen Strings hat ihre Tücken bis 99, ab da ists eigentlich ziemlich trivial.

:?: Wo ist jetzt genau das Problem ?

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Ja-Pa Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 458

Win XP, Suse 9.3
D1, D3, D5 Std, D7 Pro, D2005 Pers, Kylix 3
BeitragVerfasst: So 25.01.04 16:03 
Das Problem liegt darin

1. Zu erkennen, wo so ein Fall auftritt (z.B. nach dem Muster ZahlZahl:ZahlZahl Uhr).
Wie erkenne ich solche beliebigen Zahlenfolgen? Mit Arrays für Zahl?
(Schließlich möchte ich nicht alle 1440 Zeitmöglichkeiten einzeln abfragen).

2. Nach einer festgelegten Regel den gefundenen Text umformen (z.B. wenn ZahlZahl:ZahlZahl Uhr dann ZahlZahl Uhr ZahlZahl).

Das Problem ist eben der "Joker" Zahl, da er für alle Zahlen stehen kann.
Ein weiteres Problem ist es, die in 2. verwendete Regel zu finden
(also ob der Text eine Uhrzeit oder Rechenaufgabe ist). Dazu muss der Text um ZahlZahl:ZahlZahl herum analysiert werden.

Für einen Delphiprogrammierer, der sich mit Formatstrings auskennt, dürfte das ja kein Problem sein, aber für mich :wink:

Ist übrigens keine Hausaufgabe, bin erst in der 9. Klasse und da machen wir sowas noch nicht :cry:

Viele Grüße, Ja-Pa

_________________
Der Autor dieses Textes haftet nicht für Schäden an Soft- oder Hardware
oder Vermögensschäden, die durch das Benutzen des Textes entstehen.
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: So 25.01.04 18:23 
Hab nie behauptet, daß es eine wäre, nur das ich mal soeine hatte :wink:.

Ich habs damals (in C++) mit einer dynamischen Liste gelöst .. in Delphi reicht mal ein dynamisches Array.

Splittern wir das Problem auf:

:arrow: Erstens mußt du alle Zahlen rausfiltern und in das Array ablegen (ich betone Zahlen, nicht Ziffern).

:arrow: Bei diesen Vorgang mußt du im String die Zahlen durch ein Magic ersetzen (so hab ich das gemacht). Das ANSI-Zeichen mit dem Code 2 ist zum Bleistift bestens dafür geeignet.

:arrow: Nun mußt du für jede Zahl die Zeichen rundherum analysieren - du hast es ja schön geschrieben, auf was es ankommt.

:arrow: Jede Zahl in einen ausgeschrieben Begriff ersetzen und wieder richtig einfügen.

Das wars schon ... wenn man davon absieht, daß viel Tippselarbeit und ein bisserl Kopfzermürben ist. Ich würde mir das ehrlich nicht antun, weil eh niemand wirklich auf sowas in einer Applikation wert legt heutzutage.

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Ja-Pa Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 458

Win XP, Suse 9.3
D1, D3, D5 Std, D7 Pro, D2005 Pers, Kylix 3
BeitragVerfasst: So 25.01.04 19:31 
MaxiTB hat folgendes geschrieben:

Erstens mußt du alle Zahlen rausfiltern und in das Array ablegen (ich betone Zahlen, nicht Ziffern).


Und wie filtert man alle Zahlen (nicht Ziffern) heraus? Bei Ziffern könnte ich mir das ja noch vorstellen, aber mit Zahlen?

MaxiTB hat folgendes geschrieben:

:arrow: Bei diesen Vorgang mußt du im String die Zahlen durch ein Magic ersetzen (so hab ich das gemacht). Das ANSI-Zeichen mit dem Code 2 ist zum Bleistift bestens dafür geeignet.


Was ist ein Magic? Und welches Zeichen ist das mit dem Code 2? (Habe grad keine Tabelle zur Hand.)

MaxiTB hat folgendes geschrieben:

Ich würde mir das ehrlich nicht antun, weil eh niemand wirklich auf sowas in einer Applikation wert legt heutzutage.

Das soll ein Vorleseprogramm werden, dass einem den Text vorliest.
Funktioniert bis auf das jetzt eigentlich schon ganz gut :wink:

_________________
Der Autor dieses Textes haftet nicht für Schäden an Soft- oder Hardware
oder Vermögensschäden, die durch das Benutzen des Textes entstehen.