 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
PepperP
Anmeldungsdatum: 26.05.2010 Beiträge: 9
|
Verfasst am: 26.05.2010, 04:56 Titel: Programierprojekt :-) ... nie mehr Rechtscheibfehler ;-))) |
|
|
Hallo liebe Qbasicler,
ich bin .... hm... na ja, sooo ganz neu auch nicht mehr, aber noch längst kein Profi. Da fehlt mir noch der Überblick über die Befehle zur Dateiverwaltung, mit denen ich vor Jahren mal in VB was gemacht hab. Egal...
Okay, hier also meine Programierprojekt, was ich realisieren will, (...ich hab aber nix dagegen, wenn ich jemanden anstiften kann, der Lust hat, und mir das schreiben will, oder mich tatkräfig unterstützen will , und zwar möchte ich ein .... hm... Rechtschreib-Deutschlehrer "Veräppelungsprogramm" schreiben, welches folgenden Effekt hat, und zwar.... geht es darum, das, wenn wir einen Text lesen, wir in aller Regel nicht jeden Buchstaben lesen, sondern wir nehmen den Anfangsbuchstaben, irgendwelche charakteristischen Buchstaben in der Mitte, den Endbuchstaben und die Länge des Wortes war, und uns unsere persönliche "Worterkennungslogik" dann dass Wort verrät, auch ohne, dass wir jeden einzelnen Buchstaben bewußt warnehmen. meist reichen schon Anfangs und Endbuchstaben, sowie die charakteristische Länge eines Worte, und wir wissen, wie das Wort heißen soll.
Genau diesen Effekt will ich ausnützen. D.h. mein "Rhecshctbrieoporgam" soll einen Text einladen, und bei jedem Wort, den Anfangs- und Endbuchstaben stehen lassen, und die Buchstaben in der Mitte des Wortes nach dem Zufallsprinzip neu anordnen.
Ich hab mir das so gedacht, dass ich eine txt-Datei dem Programm mitteile, und mir mein Programm eine txt-Datei mit meinen "neuen Rechtschreibregeln" ausgibt.
Ok, ich weiß noch nicht, wie viel Zeit ich in nächster Zeit aufbringen kann, das Programm zu schreiben, wenn aber jemand diese Idee auch ulkig findet, und noch vor mir dieses Programm realisiert hat, dann bin ich da auch nicht böse .
Ansonsten wollt ich einfach halt mal vorstellen und hallo sagen.
Na bis denne dann.
PepperP |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 26.05.2010, 09:58 Titel: |
|
|
Nimm's mir nicht übel, aber ich finde es schon lustig, wenn bei einem solchen Thread-Titel selbst ein Rechtschreibfehler vorkommt Programmierprojekt schreibt man mit Doppel-m.
Im Deutschen haben wir das Problem, dass die Wörter durch unsere Wortzusammensetzungsmöglichkeit (dieses Wort gibt keinen Sinn, sondern dient nur zur Demonstration) ziemlich lang werden können und da ein buntes Mischen der mittleren Buchstaben nicht mehr funktioniert. Im Prinzip müsste man da die Einzelworte "Wort", "zusammen", "Setzung" und "Möglichkeiten" einzeln bearbeiten, aber das hieße, dass du eine ziemlich gute Wörterdatenbank im Hintergrund brauchst. Vielleicht lässt sich das Problem umgehen, wenn nicht "bunt" gemischt wird, sondern jeder Buchstabe "in etwa" an der richtigen Stelle steht? So ähnlich scheint mir das beim "Rhecshctbrieoporgam" gelöst (ist aber ein schlechtes Beispiel, weil da ein o zuviel und ein r und ein m zuwenig vorkommen ...)
Das mal so als Anregung. Bin schon gespannt.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 26.05.2010, 11:29 Titel: |
|
|
Projektidee scheint aus meiner Sicht klar definiert sein, deshalb gebe ich Dir hier etwas Gerüstcode auf den Weg. Programmablauf würde ich sehr einfach machen:
Code: | INPUT "Originaltext-Datei"; q$
INPUT "Ausgabedatei für Text"; z$
OPEN q$ FOR INPUT AS 1
OPEN z$ FOR OUTPUT AS 2
WHILE NOT EOF(1)
LINE INPUT#1, qt$
' Gewünschte Verarbeitung mittels Stringfunktionen
zt$ = ...... qt$ ......
PRINT#2, zt$
WEND
CLOSE 2
CLOSE 1 |
Um aus einer Originaltextzeile (qt$) eine Zieltextzeile (zt$) zu erhalten, musst Du intensiven Gebrauch von Stringfunktionen wie MID$(), INSTR() usw. machen, dazu noch RND für Zufallszahlen. An Deiner Stelle wie folgt arbeiten: Wörter erkennen (Gebrauch von INSTR() mit " " als Suchstring) und dann Buchstaben bei gefundene Wörtern wie Spielkarten mischen (Intensiver Gebrauch von MID$()). _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 26.05.2010, 12:03 Titel: |
|
|
Hihi, bei Satz 1 hat es mir beim ersten Mal das erste Wort nicht durchgemischt und ich wusste bereits nach den ersten sechs Buchstaben, wie der Satz weitergeht
"Fihhkndcicctiet" aus dem vorletzten Satz ist übrigens ein schönes Beispiel dafür, dass die Anordnung der mittleren Buchstaben für das Verständnis eben nicht völlig egal ist; und auch bei "Bkuuaalrt" aus dem Satz davor täte ich mir schwer, wenn ich nicht zwei Drittel des Satzes auswendig könnte. Bei "Pl�tettrbt" komme ich allerdings ins Straucheln (der dritte Buchstabe wird mir auch so unleserlich ausgegeben; wird wohl ein Umlaut sein - vielleicht "Plättbrett"?). Sonst liest es sich ganz angenehm, was aber auch an der Bekanntheit der Sätze liegen kann. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
PepperP
Anmeldungsdatum: 26.05.2010 Beiträge: 9
|
Verfasst am: 01.06.2010, 19:49 Titel: |
|
|
dreael hat Folgendes geschrieben: | Projektidee scheint aus meiner Sicht klar definiert sein, deshalb gebe ich Dir hier etwas Gerüstcode auf den Weg. Programmablauf würde ich sehr einfach machen:
Code: | INPUT "Originaltext-Datei"; q$
INPUT "Ausgabedatei für Text"; z$
OPEN q$ FOR INPUT AS 1
OPEN z$ FOR OUTPUT AS 2
WHILE NOT EOF(1)
LINE INPUT#1, qt$
' Gewünschte Verarbeitung mittels Stringfunktionen
zt$ = ...... qt$ ......
PRINT#2, zt$
WEND
CLOSE 2
CLOSE 1 |
Um aus einer Originaltextzeile (qt$) eine Zieltextzeile (zt$) zu erhalten, musst Du intensiven Gebrauch von Stringfunktionen wie MID$(), INSTR() usw. machen, dazu noch RND für Zufallszahlen. An Deiner Stelle wie folgt arbeiten: Wörter erkennen (Gebrauch von INSTR() mit " " als Suchstring) und dann Buchstaben bei gefundene Wörtern wie Spielkarten mischen (Intensiver Gebrauch von MID$()). |
So, das Programm ist fertig, und funktioniert
Die "Verhübschungen, bei denen ich alles raus lösche, was ich zur Fehlersuche benötigt hab, die gibt es dann später .
Code: |
CLS
RANDOMIZE TIMER
'INPUT "Originaltext-Datei"; q$
'INPUT "Ausgabedatei für Text"; z$
q$ = "e.txt"
z$ = "a.txt"
OPEN q$ FOR INPUT AS 1
OPEN z$ FOR OUTPUT AS 2
WHILE NOT EOF(1)
LINE INPUT #1, qt$
'Leeren des Aufnahmenstrings
zt$ = ""
'PRINT "Aufnahmestring leeren"
zeilenlaenge = LEN(qt$)
'PRINT "Zeilenl„nge = "; Zeilenlaenge
aap = 1: apd = 1: lzam = 2: azam = 2
lop1:
'sicherheitsabfrage, damit nicht ber die Zeile hinaus eingelsen werden kann
IF apd > zeilenlaenge THEN
GOTO lop2 'auslesen....
END IF
'PRINT "lop1"
'AsciiCode des aktuellen Zeichens einlesen
ascicode = ASC(MID$(qt$, apd, 1))
'PRINT "aktueles Zeichen"; CHR$(ascicode)
'PRINT "asci Code"; ascicode
'Feststellung ob Buchstabe oder anderes Zeichen
IF (ascicode > 64 AND ascicode < 91) OR (ascicode > 96 AND ascicode < 123) THEN
azam = 1'Buchstabe
' PRINT "ist Buchstabe"
ELSE
azam = 0 'Nichtbuchstabe
' PRINT "ist kein Buchstabe"
END IF
'Zeichenstatus vorher unbekannt (erster Lauf?)
IF lzam = 2 THEN
lzam = azam
END IF
'Ist Zeichenstatus mit dem Altstatus identisch?
'PRINT "LZAM="; lzam
'PRINT "azam="; azam
IF lzam = azam THEN
apd = apd + 1
GOTO lop1
END IF
lop2:
'Zeichenstatus hat sich ge„ndert
'Besteht Teilstring aus Nichtbuchstabenzeichen?
IF lzam = 0 THEN
'einbauv -> Teilstring generieren + einbau in Zielstring
lzam = 1'fall das letzte Zeichen "0"=KeinBuchstabe war, so wird das kommende eine "1" also ein Buchstabe sein
'Daher wird als n„chste Zeichen Serie Buchstaben erwartet
GOTO einbauv
ELSE
lzam = 0
END IF
'Teilstring besteht aus Buchstabenzeichen
'Buchstabenanzahl ermitteln
Buchst = apd - aap
'weniger als 4 Buchstaben?
IF Buchst < 4 THEN
'Weniger als 4 Buchstaben -> nach einbauv, teilstring generieren + einbau
GOTO einbauv
END IF
'mehr als 3 Buchstaben
'******************************************************************
'Zu bastelndes Wort in einen Teilstring
'******************************************************************
Teilstring$ = MID$(qt$, aap, Buchst)'Teilstring "roh"
Mixingstring$ = MID$(Teilstring$, 2, LEN(Teilstring$) - 2)
'PRINT
'**********************************************************************
'Fehler Mixingstring$ = MID$(Teilstring$, aap + 1, Buchst - 2) 'Herausschneiden des mittleren Teils
'Erstellen des Mixing-Aufnahme-Strings
MauFN$ = ""
'*******************************************************************
' String vorbereiten
'*******************************************************************
FOR z = 1 TO Buchst - 2'schleife um string vorzbereiten
MauFN$ = MauFN$ + "0"' mit Nullen fllen
NEXT z
'PRINT maufn$
'**********************************************************************
' ZUFALLSSCHLEIFE
'**********************************************************************
FOR z = 1 TO Buchst - 2'ZumEinsortieren per Zufall
zufall:
zz = INT(RND * (Buchst - 2)) + 1'Zufallszahl
'PRINT zz
'PRINT "Buchst"; Buchst
IF MID$(MauFN$, zz, 1) <> "0" THEN 'Falls schon etwas eingetragen ist
GOTO zufall ' Zufall wiederholen
END IF
'PRINT "auf"; maufn$
'Zeichen einfgen
MID$(MauFN$, zz, 1) = MID$(Mixingstring$, z, 1)
NEXT z
'PRINT MauFN$
'Zusammenbau des EinfgeTeilstrings
Teilstringfertig$ = MID$(Teilstring$, 1, 1) + MauFN$ + MID$(Teinlstring$, Buchst, 1)
'(Zusammenaub-1.Buchstabe-Mittelteil-letzter Buchstabe
GOTO einbau ' einbauv berspringen, dort wird fr die anderen F„lle noch der Teilstringfertig$ gebaut
einbauv:
Teilstringfertig$ = MID$(qt$, aap, apd - aap)
'PRINT "tlstf="; Teilstringfertig$
'PRINT "aap"; aap
'PRINT "apd"; apd
einbau:
zt$ = zt$ + Teilstringfertig$
'l„ngeTeilstring ermitteln
lenteil = LEN(Teilstringfertig$)
'AktuellerAnfangsPointer fr n„chsten Teilstring setzen
aap = aap + lenteil
'PRINT "aap"; aap
'fr die n„chste Analyse erh„lt
'der ArbeitsPointerDetailanalyse APD den gleichen Wert
'wie der aap
apd = aap
'Kompletter Zeilenstring schon bearbeitet?
'PRINT "zeilenlaenge"; zeilenlaenge
'PRINT "aap"; aap
IF aap <= zeilenlaenge THEN
GOTO lop1
END IF
'aap ist gleich der Zeilenl„nge --> ausgabe der Zeile
PRINT #2, zt$
WEND
CLOSE 2
CLOSE 1
|
Und für das bessere Verständnis vielleicht noch die Variablentabelle:
Zitat: |
Variablentabelle
q$ = beinhaltet die Originaldatei
z$ = Ausgabedatei
qt$=Zeile aus der Originaldatei
zt$=Zeile zur Ausgabedatei
AAP=_A_ktueller_A_nfangsgs_P_ointer
APD= _A_rbeits_P_ointer_D_etailanalyse
LZAM=LetztZeichenArtMerker 0-no Buchst 1=Buchst
AZAM= AktuellZeichenArtMerker 0=nichtBuchstabe, 1=buchstabe, 2=unbekannt
ascicode= Asci-Code des aktuell getesteten Zeichens
Teilstring$ = der T, aus dem das neu zu bastelnde Wort besteht
Mixingstring$= der Teil des T, der neu ausgewürfelt wird
Maufn$= hier wird der neugewürfelte Mixingstring aufgenommen
Buchst=Anzahl der Buchstaben des Teilstrings
Buchst=APD-AAP
z=Zählvariable universell einsetzbar
zz=Zufallszahl in der Größe von 1 - len(Buchst)
TeilstringFertig$ = Der fertige Teilstring zum einbauen
zeilenlänge=die Zeilenlänge der Quellzeilte qt$
|
Und der erst Funktionstest mit einem Text aus "Harry Potter" ergibt das folgende:
Zitat: |
Ein grässcihelr Gtrtuebasg
Im Lsrtueewigg Numemr 4 war mal wideer beirets biem
Frühstück Srtiet aercbhuseogn. Ein ltaues Keheisrcn aus dem
Zmeimr sinees Neffen Hrary httae Mr Vneorn Dsuerly in aellr
Hgfertotrsrühe aus dem Schalf geseisrn.
»Sohcn das drttie Mal dseie Wchoe!«, prettloe er über den
Tscih hewnig. »Wnen du desie Elue nchit in den Grfif ksriget,
feiglt sie raus!«
Hrray vrhuctese, übgenris nhcit zum etrsen Mal, die Schae
zu ekrlären.
»Sie llaniwget scih«, sagte er. »Sonst fgleit sie doch immer
draußen rum. Könnte ich sie nhcit weeginntss nchtas rseussalan?
«
»Hältst du mich für blöde?«, ruaztne ihn Onkel Veronn an,
wähenrd ein Stück Sleigpeei in seenim bhiscguen Sucrbnazaht
erttrteize. »Ich weiß dcoh, was pisresat, wnen disee Elue
raokmusmt.«
Er wcehetlse fienrste Bilcke mit sneeir Gatitn Pinteua.
Hrary wlolte werdisheercpn, dcoh senie Wrote ggnein in
eniem lnag ggneoezen, lteuan Rülpser uentr. Uheerbr dsesen
war Dludey, der Sohn der Dreluyss.
»Mehr Shkincen.«
»In der Pafnne ist noch wehlcer, Schätzchen«, stgae Tatne
Pnteuia und wnadte scih mit vhreiecretlsen Auegn ihrem
vefteretetn Shon zu. »Wir müsesn dcih päpepln, slongae wir
können ... Mir gfleaeln die Geräusche nhict, die die Sholukcst
in dnieem Megan vtanrsletaet.«
5
»Usninn, Pnutiea, ich bin dmlaas in Stmginels immer stat
groeedwn«, warf Onkel Voenrn bzerhet ein. »Dedluy krgeit
gneug, nicht wahr, mien Jgnue?«
Dleduy, dessen Hritenn zu bieedn Seeitn des Kücsnulhehts
hbeirhang, gtsrnie und dethre sich zu Harry um.
»Gib mir die Pannfe.«
»Du hast das Zaorurbewt veegsersn«, sagte Hrray giezert.
Dseeir sithclche Satz htate enie gewlaitge Wkuinrg auf den
Rest der Famliie: Duledy riss den Mund auf und fiel mit eienm
küchnsecerhüttderenn Kerahcn vom Stuhl. Mrs Drlsuey stieß
eeinn spteizn Srcehi aus und shclug die Hände vor den Mnud.
Mr Duresly srpnag vom Tsich auf; das Bult psilrteue wild in
snieen Sndeartrin.
»Ich hbae >btite< geenmit!«, szttee Hrary rasch nach. »Und
nhict -«
»HBAE ICH DIR NCHIT GGASET«, ttobe sein Okenl und
bpserühte deabi den Tisch mit Skucpe, »DAS WROT MIT
>Z< KMMOT MIR IN DIEESM HAUS NIHCT VOR!«
»Aber ich -«
»WIE KNNSAT DU ES WGAEN, DELDUY ZU BEREDOHN!
«, brüllte Oeknl Voernn und hämertme mit der Fasut auf
den Ticsh.
»Ich hab doch nur -«
»ICH HBAE DICH GRAWNET! UNTER MEINEM
DCAH WILL ICH NHITCS VON DIENER AIMRBONTÄT
HÖREN!«
Hrrays Bcilk wreantde vom puoutprerrn Ghiesct des Okenls
hinüber zur alhhesfacn Tante, die sich mühte, Dluedy wideer
auf die Bneie zu hveien.
»Shocn gut«, sgtae Harry, »sohcn gut ...«
Shnaencbud wie ein ecsrhöptefs Nroshan seztte scih Oknel
Vnreon weiedr hin und btteebahcoe Harry aus den Wlkinen
sieenr kneeiln sehectdnen Aeugn.
|
Grüsse
PepperP  |
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 01.06.2010, 20:55 Titel: |
|
|
Hey, das funktioniert ja wunderbar!
Hier ist sogar ein von mir äußerst verhasstes "lol" angebracht
Wollt dir eig. nur für den Spaß danken, den ich beim durchlesen hatte, ist echt klasse!
Ich hab deinen Code zwar noch nicht genau studiert, aber es währe bei deiner "Verhübschung" ziemlich dringend angebracht, Subs und Funktionen sowie Tabs zu verwenden, ich tu mir im Moment mit dem Lesen ziemlich schwer...
MfG
-schumi- |
|
Nach oben |
|
 |
PepperP
Anmeldungsdatum: 26.05.2010 Beiträge: 9
|
Verfasst am: 02.06.2010, 02:26 Titel: |
|
|
-schumi- hat Folgendes geschrieben: | Hey, das funktioniert ja wunderbar!
Hier ist sogar ein von mir äußerst verhasstes "lol" angebracht
Wollt dir eig. nur für den Spaß danken, den ich beim durchlesen hatte, ist echt klasse!
Ich hab deinen Code zwar noch nicht genau studiert, aber es währe bei deiner "Verhübschung" ziemlich dringend angebracht, Subs und Funktionen sowie Tabs zu verwenden, ich tu mir im Moment mit dem Lesen ziemlich schwer...
MfG
-schumi- |
Hi,
ich weiß nicht, ob es da viel mit Subs und Funktionen zu machen ist.
Am besten, ich erzahle mal das Flußdiagramm "aus dem Kopf" heraus, dann wird es vielleicht verständlicher, was ich gemacht hab.
Ok, das außen rum, also wie man Dateien öffnet und schreibt, den Code hab ich von hier übernommen.
Nun wird also von dem "Rahmenprogramm" immer eine Zeile des Quelltextes in die Variable qt$ übergebeben, und zwar immer eine gesammte Zeile.
Und diese Zeile untersuche ich Abschnitt für Abschnitt, wobei ein Abschnitt immer ein Bereich darstellt, der entweder Buchstaben enthält, oder eben Keine Buchstaben. Hier sind also Leerzeichen, Satzzeichen, Sonderzeichen etc alles "Nichtbuchstabenzeichen" und die Buchstaben sind eben "Buchstabenzeichen".
Ich fange also an, das erste Zeichen in der Zeile zu untersuchen und stelle fest, ob das Zeichen zur Kathegorie Buchstaben oder Nichtbuchstaben gehört. Danach untersuche ich das nächste Zeichen, und überprüfe, ob dieses zur gleichen Kathegorie gehört. Das wiederholoe ich so lange, bis ich auf ein Zeichen stoße, dass zu einer anderen Kathegorie gehört. Damit weiß ich, dass der letzte Abschnitt beendet ist. Jetzt erfolgt eine Abfrage, ob der letzte Abschnitt zur Buchstaben oder zur Nichtbuchstabenkathegorie gehört. Wenn der letzte Abschnitt zu Nichtbuchstabenkathegorie gehört, dann wird der kompette Abschnitt in den Ergebniszeilensting kopiert. Wenn es sich aber um eine Buchstabenkathegorie handelte, dann wird abgefragt, um wieviele Buchstaben es sich handelt. Sind es weniger als 4 Buchstaben, also 3,2 oder 1, dann wird dieser Buchstabenabschnitt ebenfalls unverändert in den Zielzeilenstring kopiert, denn bei Worten bis zu drei Buchstaben gibt es nichst zu mischen, denn Anfangs- und Endbuchstaben sollen an ihre Platz bleiben. Wenn es sich aber um 4 oder mehr Buchstaben handelt, dann wird der mittlere Teil, herausgenommen, also der erste und letzte Teil wird entfernt, und die mittleren Buchstaben werden einfach per Zufallsgenerator in ihren Plätzen neu angeordnet werden - hierbei kann es bei kürzeren Wörern durchaus passieren, das die Buchstaben wieder genau so angeordenet werden, wie es richtig wäre, dann wird wider der erste und letze Buchstabe hinzugefügt und das ganze in den Erbegniszeilenstring eingefügt. Anschließend geht es dann weiter mit dem suchen eines neuen Abschnitts, und immer so weiter, bis die komplette Zeile abgearbeitet wurde, die wird dann in die Zieldatei kopiert, und eine neue Zeile aus der Quelldatei geholt.
Klingst soweit eigentlich alles logisch.... na ja, wenn man mit machen Befehlen nicht so vertraut ist, und auch etwas aus der Übung ist, dann ist es aber nicht ganz so einfach. In jedem Fall war der Code außen herum erstmal die Grundlage, damit ich das machen konnte.
Und in diesem Sinne viel Spaß damit.
PerpperP |
|
Nach oben |
|
 |
PepperP
Anmeldungsdatum: 26.05.2010 Beiträge: 9
|
Verfasst am: 02.06.2010, 02:37 Titel: |
|
|
PepperP hat Folgendes geschrieben: | -schumi- hat Folgendes geschrieben: | Hey, das funktioniert ja wunderbar!
Hier ist sogar ein von mir äußerst verhasstes "lol" angebracht
Wollt dir eig. nur für den Spaß danken, den ich beim durchlesen hatte, ist echt klasse!
Ich hab deinen Code zwar noch nicht genau studiert, aber es währe bei deiner "Verhübschung" ziemlich dringend angebracht, Subs und Funktionen sowie Tabs zu verwenden, ich tu mir im Moment mit dem Lesen ziemlich schwer...
MfG
-schumi- |
Hi,
ich weiß nicht, ob es da viel mit Subs und Funktionen zu machen ist.
Am besten, ich erzahle mal das Flußdiagramm "aus dem Kopf" heraus, dann wird es vielleicht verständlicher, was ich gemacht hab.
Ok, das außen rum, also wie man Dateien öffnet und schreibt, den Code hab ich von hier übernommen.
Nun wird also von dem "Rahmenprogramm" immer eine Zeile des Quelltextes in die Variable qt$ übergebeben, und zwar immer eine gesammte Zeile.
Und diese Zeile untersuche ich Abschnitt für Abschnitt, wobei ein Abschnitt immer ein Bereich darstellt, der entweder Buchstaben enthält, oder eben Keine Buchstaben. Hier sind also Leerzeichen, Satzzeichen, Sonderzeichen etc alles "Nichtbuchstabenzeichen" und die Buchstaben sind eben "Buchstabenzeichen".
Ich fange also an, das erste Zeichen in der Zeile zu untersuchen und stelle fest, ob das Zeichen zur Kathegorie Buchstaben oder Nichtbuchstaben gehört. Danach untersuche ich das nächste Zeichen, und überprüfe, ob dieses zur gleichen Kathegorie gehört. Das wiederholoe ich so lange, bis ich auf ein Zeichen stoße, dass zu einer anderen Kathegorie gehört. Damit weiß ich, dass der letzte Abschnitt beendet ist. Jetzt erfolgt eine Abfrage, ob der letzte Abschnitt zur Buchstaben oder zur Nichtbuchstabenkathegorie gehört. Wenn der letzte Abschnitt zu Nichtbuchstabenkathegorie gehört, dann wird der kompette Abschnitt in den Ergebniszeilensting kopiert. Wenn es sich aber um eine Buchstabenkathegorie handelte, dann wird abgefragt, um wieviele Buchstaben es sich handelt. Sind es weniger als 4 Buchstaben, also 3,2 oder 1, dann wird dieser Buchstabenabschnitt ebenfalls unverändert in den Zielzeilenstring kopiert, denn bei Worten bis zu drei Buchstaben gibt es nichst zu mischen, denn Anfangs- und Endbuchstaben sollen an ihre Platz bleiben. Wenn es sich aber um 4 oder mehr Buchstaben handelt, dann wird der mittlere Teil, herausgenommen, also der erste und letzte Teil wird entfernt, und die mittleren Buchstaben werden einfach per Zufallsgenerator in ihren Plätzen neu angeordnet werden - hierbei kann es bei kürzeren Wörern durchaus passieren, das die Buchstaben wieder genau so angeordenet werden, wie es richtig wäre, dann wird wider der erste und letze Buchstabe hinzugefügt und das ganze in den Erbegniszeilenstring eingefügt. Anschließend geht es dann weiter mit dem suchen eines neuen Abschnitts, und immer so weiter, bis die komplette Zeile abgearbeitet wurde, die wird dann in die Zieldatei kopiert, und eine neue Zeile aus der Quelldatei geholt.
Klingst soweit eigentlich alles logisch.... na ja, wenn man mit machen Befehlen nicht so vertraut ist, und auch etwas aus der Übung ist, dann ist es aber nicht ganz so einfach. In jedem Fall war der Code außen herum erstmal die Grundlage, damit ich das machen konnte.
Und in diesem Sinne viel Spaß damit.
PerpperP |
Und hier dann ins "Reine"
Hi,
ich weiß nicht, ob es da viel mit Sbus und Fnoitknuen zu mchean ist.
Am btesen, ich ehalzre mal das Flußdamiargm "aus dem Kopf" heuars, dann wrid es viihlecelt vsertäniehdclr, was ich gmchaet hab.
Ok, das außen rum, also wie man Deeiatn öffnet und srheibct, den Cdoe hab ich von heir übemrmeonn.
Nun wrid aslo von dem "Rmornameprhagm" immer enie Zleie des Qletexultes in die Vbalriae qt$ übgebbeeern, und zawr iemmr eine gemmsate Zilee.
Und dsiee Zliee utecunhsre ich Abnishctt für Atihcsbnt, wobei ein Acnihbtst imemr ein Breecih daelrtslt, der eewedtnr Bhatbeuscn etnhält, oder eebn Kniee Btcuhseabn. Hier snid also Lrezeihceen, Sectiehzzan, Siechdrzoeenn etc aells "Nzbeastihubencehccithn" und die Buhscbetan snid eben "Bhhebzcesceitanun".
Ich fngae aslo an, das estre Zeehcin in der Zeile zu urhtseuncen und slelte fset, ob das Zechien zur Kgeoarthie Bheubsatcn oedr Ntuchabctbhsein gehört. Dcnaah uenuchrtse ich das näctshe Zeehicn, und übperrüfe, ob dseies zur glheicen Khtiraogee gehört. Das wolordeheie ich so lngae, bis ich auf ein Zecihen stoße, dsas zu eeinr adenren Kgeitoahre gehört. Dmiat weiß ich, dass der ltteze Atnhsbcit beneedt ist. Jzett eoglrft eine Arfabge, ob der lettze Aibchntst zur Bucbeahtsn oedr zur Niahchbstgetbocitkehranue gehört. Wnen der ltteze Ancstibht zu Niththnugbcbetaaohesrkcie gehört, dann wird der kettmpoe Aitbnhsct in den Elieiennisrbgsetnzg kiopert. Wenn es scih aber um eine Bhasutnebicaogekhrte hentdlae, dann wird aabggefrt, um weielive Bucbahtesn es sich henladt. Sind es weengir als 4 Btuschaebn, also 3,2 oder 1, dnan wird desier Bcnissachthatbenbut ebleflnas unveränerdt in den Ziertesznilnleig kiporet, denn bei Wotern bis zu deri Bthubsecan gbit es ncisht zu mhiecsn, denn Aafnngs- und Eatusnbedhcbn seloln an ihre Ptlaz bieblen. Wenn es scih aber um 4 oder mher Bbscehtaun hedlant, dnan wrid der milrtete Tiel, heegrauosnmmen, aslo der etsre und lttzee Tiel wird enetrnft, und die mteeirltn Bucesathbn wderen enfiach per Zrouafelasltnger in ihern Plätezn neu agnodeenrt weerdn - hirebei kann es bei kürreezn Wörren dauchurs pesiasern, das die Buhetasbcn wedeir gaenu so aeneedgnort weredn, wie es rcihtig wäre, dann wrid wdier der estre und lteze Bbtahucse hnzuigefügt und das gnaze in den Etnigesernrsielbizng eeignfügt. Ahlnscießend geht es dnan weteir mit dem scheun eiens neuen Athibtscns, und immer so wieter, bis die ktepltome Zilee atebgabeiret wdure, die wird dnan in die Ztlediaei koeprit, und enie neue Zelie aus der Qdueatelli ghleot.
Knsglit sieowt eteglicinh alles losicgh.... na ja, wenn man mit mceahn Beeflhen nhcit so vrtreaut ist, und acuh etwas aus der Übung ist, dann ist es aber nhict gnaz so efancih. In jeedm Fall war der Code außen huerm eatsrml die Grludgnae, damit ich das mahcen knotne.
Und in deeism Snnie veil Spaß daimt.
PprpeerP |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|