|
Registriert seit: 7. Aug 2008 Ort: Brandenburg 1.487 Beiträge Delphi 12 Athens |
#9
Random(n) liefert einen Wert von 0 bis n-1, deine Array beginnen aber bei 1.
Vorschläge als Anregung: Am Ende eines Absatzes sollte vor dem Zeilenumbruch kein Leerzeichen stehn. Nach Ende des gesamten Textes sollte kein Leerzeichen oder Zeilenumbruch folgen. Wenn Punktierung aktiv ist, sollte der Text in jedem Fall mit einem Punkt enden und das erste Wort des gesamten Textes sollte auch mit einem Grossbuchstaben beginnen. Innerhalb eines Teilsatzes(Komma) sollten nicht zwei gleiche Worte aufeinander folgen. Wie die Bedingung für ein Satzende bzw. Komma wirken soll, ist mir nicht ganz verständlich. Vieleicht sollte doch eher die Länge des Satzes bzw. des Teilsatzes in die Entscheidung einfließen. Wenn ein Text mit nur nur einem Wort erzeugt werden soll und (Absatz > 0), wird vor dem Wort immer ein Zeilenumbruch eingefügt. Egal ob ein Pre-Wort davor steht. Bei einem Text aus mehreren Worten steht dort niemals ein Zeilenumbruch. Vieleicht besser: Wenn (Absatz > 0) sollte nach dem Pre-Wort immer ein Zeilenumbruch folgen, ohne Pre-Wort vor dem erste Wort in beiden Fällen nicht. Damit könnte die Sonderbehandlung von einem Text mit nur einem Wort ganz entfallen. Derzeit werden die statischen Variablen für die Formatierung einmal per Parameter gesetzt und dann einfach weiter zu verwendet, wenn der Parameter nicht angegeben wurde. Die Varianten Standard und Bavaria an mehreren Stellen über case zu unterscheiden ist nicht gut gelöst. Wenn mal eine weitere Variante hinzukommt, muss der vorhandene Quelltext erweitert werden und wird noch unübersichtlicher. Das spricht für eine Klassenstruktur. Man muss sich nur entscheiden ob direkt mit den Klassen gearbeitet wird oder Instanzen erzeugt werden müssen (jede mit eigenen Einstellungen für die Formatierung).
Delphi-Quellcode:
unit Unit_LoremIpsum;
interface uses SysUtils, Classes, Types; type TLoremIpsumCustom = class(TObject) protected class function GetPreText: string; virtual; abstract; class function GetRandomWord: string; virtual; abstract; public class var Absatz: Integer; class var UsePre: Boolean; class var Punktierung: Boolean; class var Kommata: Boolean; class function Generate(ACount: Integer): string; end; TLoremIpsum = class(TLoremIpsumCustom) protected class function GetPreText: string; override; class function GetRandomWord: string; override; end; TLoremIpsumBavaria = class(TLoremIpsumCustom) protected class function GetPreText: string; override; class function GetRandomWord: string; override; end; implementation const LoremIpsum_Pre = 'Lorem ipsum'; LoremIpsum: Array [0 .. 116] of string = ('dolor', 'sit', 'amet', 'consetetur', 'sadipscing', 'elitr', 'sed', 'diam', 'nonumy', 'eirmod', 'tempor', 'invidunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliquyam', 'erat', 'voluptua', 'at', 'vero', 'eos', 'accusam', 'justo', 'duo', 'dolores', 'ea', 'rebum', 'stet', 'clita', 'kasd', 'gubergren', 'no', 'sea', 'takimata', 'sanctus', 'est', 'lorem', 'ipsum', 'duis', 'autem', 'vel', 'eum', 'iriure', 'in', 'hendrerit', 'vulputate', 'velit', 'esse', 'molestie', 'consequat', 'illum', 'eu', 'feugiat', 'nulla', 'facilisis', 'eros', 'accumsan', 'iusto', 'odio', 'dignissim', 'qui', 'blandit', 'praesent', 'luptatum', 'zzril', 'delenit', 'augue', 'te', 'feugait', 'facilisi', 'consectetuer', 'adipiscing', 'elit', 'nonummy', 'nibh', 'euismod', 'tincidunt', 'laoreet', 'aliquam', 'volutpat', 'wisi', 'enim', 'ad', 'minim', 'veniam', 'quis', 'nostrud', 'exerci', 'tation', 'ullamcorper', 'suscipit', 'lobortis', 'nisl', 'aliquip', 'ex', 'commodo', 'nam', 'liber', 'cum', 'soluta', 'nobis', 'eleifend', 'option', 'congue', 'nihil', 'imperdiet', 'doming', 'id', 'quod', 'mazim', 'placerat', 'facer', 'possim', 'assum', 'amet'); LoremIpsum_Bavaria_Pre = 'Bavaria ipsum'; LoremIpsum_Bavaria: Array [0 .. 388] of string = ('ghupft', 'wia', 'gsprunga', 'pfiad', 'de', 'guad', 'freibia', 'eam', 'oa', 'meidromml', 'a', 'bissal', 'aba', 'fei', 'moand', 'deandlgwand', 'da', 'buachbinda', 'wanninger', 'schneid', 'milli', 'maßkruag', 'wos', 'des', 'muas', 'ma', 'hoid', 'kenna', 'nix', 'gwiass', 'woass', 'ned', 'af', 'etza', 'kimmt', 'vergeltsgott', 'wann', 'griagd', 'nacha', 'z', 'dringa', 'leonhardifahrt', 'ham', 'radi', 'resch', 'xaver', 'haferl', 'greichats', 'is', 'liab', 'griasd', 'eich', 'midnand', 'weißwiaschd', 'mim', 'radl', 'foahn', 'hendl', 'schdeckalfisch', 'gscheit', 'unbandig', 'maibam', 'mechad', 'gschicht', 'sauba', 'scheans', 'marterl', 'woar', 'hod', 'dringma', 'aweng', 'maß', 'und', 'no', 'landla', 'gaudi', 'foidweg', 'hi', 'schdarmbeaga', 'see', 'mongdratzal', 'ewig', 'drei', 'dog', 'geh', 'mi', 'maderln', 'fingahaggln', 'anbandeln', 'schmankal', 'radler', 'weibaleid', 'namidog', 'marei', 'i', 'bin', 'woschechta', 'bayer', 'ebba', 'klampfn', 'enzian', 'basd', 'scho', 'obazda', 'bitt', 'prosd', 'spernzaln', 'auffi', 'gidarn', 'auf', 'gehds', 'beim', 'schichtl', 'allerweil', 'habedehre', 'ded', 'sog', 'schorsch', 'watschnpladdla', 'iabaroi', 'aasgem', 'pfenningguat', 'biakriagal', 'kummd', 'barfuaßat', 'umma', 'baamwach', 'ramasuri', 'wuascht', 'liberalitas', 'bavariae', 'buam', 'jedza', 'ohrwaschl', 'om', 'n', 'gipfe', 'kirwa', 'sei', 'gehd', 'ollaweil', 'oans', 'zwoa', 'gsuffa', 'd', 'trihöleridi', 'dijidiholleri', 'schoo', 'gscheckate', 'edlweiss', 'nomoi', 'zidern', 'woibbadinga', 'obacht', 'measi', 'liabs', 'deandl', 'goaßmaß', 'in', 'greana', 'au', 'diandldrahn', 'bradwurschtsemmal', 'daad', 'g', 'hupft', 'midanand', 'schüds', 'nei', 'noch', 'giasinga', 'heiwog', 'breihaus', 'schuabladdla', 'fünferl', 'griasnoggalsubbm', 'do', 'bittschön', 'imma', 'mogsd', 'bussal', 'aso', 'nimma', 'hob', 'an', 'suri', 'wea', 'nia', 'ausgähd', 'kummt', 'hoam', 'ganze', 'hoiwe', 'haberertanz', 'wiad', 'mordsgaudi', 'oba', 'schbozal', 'eana', 'hea', 'schee', 'fensdaln', 'hoggd', 'griaß', 'god', 'beinand', 'fias', 'sodala', 'hemad', 'glacht', 'helfgod', 'resi', 'fescha', 'bua', 'gstanzl', 'hog', 'di', 'singd', 'kini', 'naa', 'kumm', 'sepp', 'abfieseln', 'schellnsau', 'charivari', 'zünftig', 'broadwurschtbudn', 'dahoam', 'samma', 'gamsbart', 'need', 'hallelujah', 'luja', 'koa', 'wuid', 'amoi', 'biagadn', 'von', 'gfreit', 'am', 'acht', 'tag', 'schuf', 'gott', 'bia', 'hinter', 'm', 'berg', 'san', 'leit', 'hogg', 'uns', 'zamm', 'obandeln', 'hetschapfah', 'kloan', 'musi', 'so', 'schmarn', 'reiwadatschi', 'kuaschwanz', 'back', 'mas', 'gwihss', 'wolln', 'ognudelt', 'moan', 'oiwei', 'jo', 'mei', 'gams', 'wo', 'großherzig', 'soi', 'biazelt', 'ledahosn', 'wolpern', 'semmlkneedl', 'servas', 'der', 'oim', 'gibt', 's', 'sünd', 'oachkatzlschwoaf', 'singan', 'legst', 'nieda', 'es', 'zua', 'hab', 'heimatland', 'pfundig', 'biawambn', 'jodler', 'gwiss', 'schaugn', 'nimmds', 'vui', 'spezi', 'graudwiggal', 'kaiwe', 'spotzerl', 'zwedschgndadschi', 'ja', 'red', 'bloß', 'gmahde', 'wiesn', 'sowos', 'weida', 'gelbe', 'rüam', 'schaung', 'kost', 'lem', 'lossn', 'umananda', 'denn', 'wiavui', 'gor', 'gar', 'narrisch', 'gean', 'wurscht', 'huift', 'auszutzeln', 'mehra', 'dee', 'schwoanshaxn', 'vasteh', 'waar', 'soweid', 'sauakraud', 'trachtnhuat', 'baddscher', 'middn', 'guglhupf', 'steckerleis', 'schnacksln', 'weiznglasl', 'du', 'dadst', 'daugn', 'sammawiedaguad', 'heid', 'watschnbaam', 'mog', 'blärrd', 'kneedl', 'engelgwand', 'sonn', 'spuiratz', 'owe', 'leck', 'oamoi', 'brezn', 'vo', 'heitzdog', 'greaßt', 'nachad', 'ozapfa', 'gfoids', 'sagrisch', 'almrausch', 'sauwedda', 'glei', 'brodzeid', 'gschmeidig', 'bladl', 'bravs', 'lewakaas', 'wui', 'boarischer', 'hawadere', 'midananda', 'im', 'beidl', 'dei', 'mamalad', 'prosit', 'gmiadlichkeit', 'stubn', 'wirds', 'fui', 'lustiga', 'brotzeit', 'biaschlegl', 'oans'); class function TLoremIpsumCustom.Generate(ACount: Integer): string; function UpCaseFirst(const AValue: string; AUpCase: Boolean): string; begin Result := AValue; if AUpCase and (Length(Result) > 0) then Result[1] := UpCase(Result[1]); end; var i, n: Integer; SatzBegin: Boolean; SatzKomma: Boolean; begin Result := ''; if ACount < 1 then Exit; if UsePre then begin Result := GetPreText; if Absatz > 0 then Result := Result + sLineBreak else Result := Result + SPACE; end; {erstes Word beginnt mit Grossbuchstabe} Satzbegin := Punktierung; for i := 1 to ACount do begin {kein zusätzliches Trennzeichen am Textanfang} if i > 1 then begin var Trennzeichen: string := SPACE; if (Absatz > 0) and (i > 1) then begin if Absatz > ACount then n := 3 else n := Absatz; n := ACount div n; if (i mod n) = 0 then Trennzeichen := sLineBreak; end; Result := Result + Trennzeichen; end; Result := Result + UpCaseFirst(GetRandomWord, Satzbegin); SatzKomma := False; {nicht am Textende} if Kommata and (i < ACount) then begin if Random(i) mod 7 = Random(2) then begin Result := Result + ','; SatzKomma := True; end; end; Satzbegin := False; if Punktierung and (not SatzKomma) then begin {Auf jeden Fall am Textende} if (i = ACount) or (Random(i) mod 17 = Random(2)) then begin Result := Result + '.'; Satzbegin := True; end; end; end; end; class function TLoremIpsum.GetPreText: string; begin Result := LoremIpsum_Pre; end; class function TLoremIpsum.GetRandomWord: string; begin Result := LoremIpsum[Random(High(LoremIpsum))]; end; class function TLoremIpsumBavaria.GetPreText: string; begin Result := LoremIpsum_Bavaria_Pre; end; class function TLoremIpsumBavaria.GetRandomWord: string; begin Result := LoremIpsum_Bavaria[Random(High(LoremIpsum_Bavaria))]; end; end.
Delphi-Quellcode:
program LoremIpsum;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Unit_LoremIpsum in 'Unit_LoremIpsum.pas'; begin try Randomize; TLoremIpsum.Absatz := 3; TLoremIpsum.Kommata := True; TLoremIpsum.UsePre := True; TLoremIpsum.Punktierung := True; writeln(TLoremIpsum.Generate(50)); writeln; writeln(TLoremIpsumBavaria.Generate(50)); readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |