generateText (alle OS, Anfänger-Tip)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

generateText (alle OS, Anfänger-Tip)

Beitrag von Tommy »

Generiert ein Text aus zufälligen Wörter mit Groß und Kleinschreibung und Vokalen und Konsonanten.
Brauche ich immer wenn ich ein EditorGadget habe und brauche Textvorlagen
dann will ich nicht auf meine Tasten hämmern oder irgendein Text aus dem Internet kopieren.
Damit geht es einfacher und schneller :allright:
Sieht zwar nach viel Code aus aber musste sein um etwas realische Wörter zu generieren.
Viel Spass :allright:

Code: Alles auswählen

;(c) Tommy
Procedure.s generateText(WordTotal)
  Protected i, j, Text.s, Word.s, WordLength, PhraseLength, PhraseNr, MaxVowelTotal, Uppercase, BCD.s = "bcdfghjklmnpqrstvwxyz", AEI.s = "aeiou", NextUppdercase = 1
 
  PhraseLength = Random(15, 3)
  For j=1 To WordTotal
    WordLength = Random(10, 2)
    Uppercase = Random(1)
    Word = ""
    PhraseNr + 1
    For i=1 To WordLength
      If MaxVowelTotal = 0
        MaxVowelTotal = Random(3, 1)
      EndIf
      MaxVowelTotal - 1
      If MaxVowelTotal = 0
        If Uppercase = 1 And i = 1
          Word = UCase(Mid(BCD, Random(21, 1), 1))
        Else
          Word + Mid(BCD, Random(21, 1), 1)
        EndIf
      Else
        If Uppercase = 1 And i = 1
          Word = UCase(Mid(AEI, Random(5, 1), 1))
        Else
          Word + Mid(AEI, Random(5, 1), 1)
        EndIf
      EndIf
    Next i
    If PhraseLength = PhraseNr
      Text + Word + "." + Chr(13)
      PhraseNr = 0
      NextUppdercase = 1
      PhraseLength = Random(15, 3)
    Else
      If NextUppdercase = 1
        Text + UCase(Left(Word, 1)) + Mid(Word, 2) + " "
        NextUppdercase = 0
      Else
        Text + Word + " "
      EndIf
    EndIf
  Next j
  ProcedureReturn Text
EndProcedure

Define event
OpenWindow(0, 0, 0, 600, 600, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(0, 0, 0, 600, 600)
SetGadgetText(0, generateText(500))

Repeat
  event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
Zuletzt geändert von Tommy am 27.01.2015 15:06, insgesamt 5-mal geändert.
PB 5.41 x64
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: generateText

Beitrag von Vera »

Hi Tommy,
Auf den ersten Blick sieht es wie Text aus :D - nur der Satzanfangsbuchstabe müßte noch groß geschrieben sein.

Im englischen Forum gibt es einen 'Freature Request' zu dem Thema eine Konstante für automatisch erzeugten Text zu haben
... mit diversen Lösungsvorschlägen: Constant request: #LOREM$

Vielleicht bringst Du Deine Lösung auch noch ein? :wink:

Gruß ~ Vera
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Re: generateText (alle OS, Anfänger-Tip)

Beitrag von Tommy »

Anfangsbuchstabe wird jetzt groß geschrieben wenn ein Satz beginnt.

Code: Alles auswählen

;(c) Tommy
Procedure.s generateText(WordTotal)
  Protected i, j, Text.s, Word.s, WordLength, PhraseLength, PhraseNr, MaxVowelTotal, Uppercase, BCD.s = "bcdfghjklmnpqrstvwxyz", AEI.s = "aeiou", NextUppdercase = 1
 
  PhraseLength = Random(15, 3)
  For j=1 To WordTotal
    WordLength = Random(10, 2)
    Uppercase = Random(1)
    Word = ""
    PhraseNr + 1
    For i=1 To WordLength
      If MaxVowelTotal = 0
        MaxVowelTotal = Random(3, 1)
      EndIf
      MaxVowelTotal - 1
      If MaxVowelTotal = 0
        If Uppercase = 1 And i = 1
          Word = UCase(Mid(BCD, Random(21, 1), 1))
        Else
          Word + Mid(BCD, Random(21, 1), 1)
        EndIf
      Else
        If Uppercase = 1 And i = 1
          Word = UCase(Mid(AEI, Random(5, 1), 1))
        Else
          Word + Mid(AEI, Random(5, 1), 1)
        EndIf
      EndIf
    Next i
    If PhraseLength = PhraseNr
      Text + Word + "." + Chr(13)
      PhraseNr = 0
      NextUppdercase = 1
      PhraseLength = Random(15, 3)
    Else
      If NextUppdercase = 1
        Text + UCase(Left(Word, 1)) + Mid(Word, 2) + " "
        NextUppdercase = 0
      Else
        Text + Word + " "
      EndIf
    EndIf
  Next j
  ProcedureReturn Text
EndProcedure

Define event
OpenWindow(0, 0, 0, 600, 600, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(0, 0, 0, 600, 600)
SetGadgetText(0, generateText(500))

Repeat
  event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
PB 5.41 x64
Antworten