bahnhof
Goto Top

Small Basic Daten Speichern

Hallo,
Ich versuch mich gerade in Small Basic einzuarbeiten. Dort möchte ich Ein Kleines Programm schreiben in dem Die Nutzer etwas eintragen müssen. Das habe ich auch schon geschaft. Ich möchte aber gerne dass, das Programm die Daten in eine Textdatei speichern und danach das Programm neu startet und der Nächste soll etwas eintragen so möchte ich sehr schnell bestimmte Daten sammeln.
Nun finde ich nicht den Befehl der die Daten in einer Datei speichert. Und auch nicht dass, das Programm danach neu startet.
Da das Programm jedem Nutzer einen Nutzernamn erstellen soll wer as schön wenn es einen Befehl gäber (muss aber nicht sein) der automatisch den ganzen Vornamen kleinschreibt und ä,ö oder ü in ae,oe oder ue umwandelt. Und dann den Ersten Buchstaben das Nachnamen hinten einfügt.
Das aller beste wer jetzt noch wenn es einen Befehl gäbe der jetzt auch nch in den schon entstandenen Daten schaut ob jemand dort schon diesen Benutzenamen hatt und falls dieses so ist soll der Zweite Buchstabe des Nachnamens dazukommen und immer so weiter. Vielleicht kann das Programm ja auch noch sagen ob der Vor und Nachname schon so in der Datei existiert.
Würde mich über eine Antwort freuen
Mit freunlichen Grüßen
bahnhof

Content-Key: 182900

Url: https://administrator.de/contentid/182900

Printed on: April 18, 2024 at 03:04 o'clock

Member: bastla
bastla Mar 31, 2012 at 18:54:47 (UTC)
Goto Top
Hallo bahnhof!

Ich kenne "Small Basic" zwar leider nicht, aber was so auf die Schnelle der Doku zu entnehmen war:
  • An bestehende Datei anfügen: File.AppendContents(filePath, contents)
  • Gesamten Dateiinhalt einlesen: File.ReadContents(filePath)
  • Prüfen, ob ein Text einen anderen Text enthält: Text.IsSubText(text, subText)
  • Text in Kleinbuchstaben umwandeln: Text.ConvertToLowerCase(text)
  • Einzelne Zeichen eines Textes entnehmen: Text.GetSubText(text, start, length)

Für das Ersetzen eines Textes (Umaute) könnte die Extended Text Library helfen ...

Grüße
bastla
Member: bahnhof
bahnhof Mar 31, 2012 at 19:15:53 (UTC)
Goto Top
Ich habe das gerade ausprobiert und ich glaube das das nicht klappt.
Oder soll ich mal die Par Zeilen die ich bisher programmiert habe posten und du sagst mir dann wo ich das da einfügen soll?
Member: bastla
bastla Mar 31, 2012 at 19:23:29 (UTC)
Goto Top
Hallo bahnhof!
ich glaube das das nicht klappt.
Programmierung ist sicherlich keine Glaubensfrage ... face-wink

... also solltest Du schon wissen, was klappt und was nicht (und daher vielleicht sogar eine Fehlermeldung, die weiterhelfen könnte, bringt).
soll ich mal die Par Zeilen die ich bisher programmiert habe posten
Kann ja nicht schaden ...

... da ich allerdings, wie erwähnt, "Small Basic" nicht kenne, kann ich bestenfalls Tipps geben ...

Grüße
bastla
Member: bahnhof
bahnhof Mar 31, 2012 at 19:50:24 (UTC)
Goto Top
start:
i = 1 
TextWindow.WriteLine("Sicherheitsfrage: Bitte gebe eine von diesen Zahlen ein")  
q:
TextWindow.WriteLine(i)
i = i + 1 
If (i < 9) Then 
  Goto q
EndIf
TextWindow.WriteLine(" " + i + " ")  
Zahl = TextWindow.ReadNumber()
If (Zahl < 9) Then
  TextWindow.WriteLine("a")  
Else
  TextWindow.WriteLine("Diese Zahl war nicht aus der Liste")   
  TextWindow.Clear()
  Goto start
EndIf
TextWindow.Clear()
TextWindow.Write("Wie viel ist (3 + " + Zahl + ")*5 ?")  
Antwort = TextWindow.ReadNumber()
TextWindow.Clear()
If (Antwort = (Zahl+3)*5) Then
  TextWindow.WriteLine("Diese Antwort ist richtig.Nun können Sie anfangen")  
  TextWindow.WriteLine("Um weiter zu kommen müssen Sie die Eingabetaste betätigen")  
  TextWindow.Read()
Else
  TextWindow.WriteLine("Versuchen Sie es bitte noch einmal")   
  TextWindow.Clear()
  Goto start
EndIf
TextWindow.Clear()
TextWindow.Write("Ihr Vorname komplet kleingeschrieben und ohne ä,ö oder ü diese bitte durch ae,oe oder ue ersetzen. ")  
Vorname = TextWindow.Read()
Text.ConvertToLowerCase(Vorname)
TextWindow.Write("Ihr Nachname ")  
Nachname = TextWindow.Read()
TextWindow.Write("Ihr Gewünschtes Passwort ")  
Passwort = TextWindow.Read()
TextWindow.Clear()
TextWindow.WriteLine("Vielen Dank " + Vorname + " " + Nachname +  " ")  
TextWindow.WriteLine("Ihr Passwort wurde gesetz und ist wahrscheinlich ab anfang nächster Woche feigeschaltet.")  
TextWindow.WriteLine("Ihr Anmeldename ist.")  
TextWindow.WriteLine("Bitte drücken Sie die Eingabetaste damit der nächste Nutzer seine Daten eingeben kann.")  
TextWindow.Read()
TextWindow.Clear()
Goto start

Hier vielleicht kannst du mir Sagen Was ich da machen muss. Ich möcht das hinter "Ihr Anmeldename" der Vorname der Person steht und ein Buchstabe des Nachnamens. Das soll da aber alles klein stehen und ohne ä,ö,ü. Und falls sich ein Zweiter anmeldet der Vorname und den ersten Buchstaben des Nachnemen Identisch hatt soll er 2 Buchstaben eingeben und immer so weiter. Und wenn es der Gleiche Name ist soll dort stehen das diese Person schon angemeldet ist.
Und es sollen halt die Daten die Dort eingegeben werden in einer Textdatei zumbeispiel auf dem Desktop gespeichert werden damit ich dann einmal in der Woche die Textdatei öffnen kann und Den Personen neue Benutzerakounts erstellen kann.

Danke für deine bemühungen
Mit freundlichen Grüßen
bahnhof

[Edit Biber] Codeformatierung. Aber die Textformatierung mach ich nicht. [/Edit]
Member: bastla
bastla Apr 01, 2012 at 21:28:59 (UTC)
Goto Top
Hallo bahnhof!

Völlig ungetestet könnte das etwa so aussehen:
Datei = "D:\Anmeldungen.txt"  
Delim = ";"  

start:
TextWindow.WriteLine("Sicherheitsfrage: Bitte gebe eine von diesen Zahlen ein:")  
For i = 1 To 9
    TextWindow.WriteLine(i)
EndFor
TextWindow.WriteLine(" " + i + " ")  
Zahl = TextWindow.ReadNumber()
If (Zahl < 9) Then
    TextWindow.WriteLine("a")  
Else
    TextWindow.WriteLine("Diese Zahl war nicht aus der Liste")  
    TextWindow.Clear()
    Goto start
EndIf

TextWindow.Clear()
TextWindow.Write("Wie viel ist (3 + " + Zahl + ")*5 ?")  
Antwort = TextWindow.ReadNumber()
TextWindow.Clear()
If (Antwort = (Zahl+3)*5) Then
    TextWindow.WriteLine("Diese Antwort ist richtig.Nun können Sie anfangen")  
    TextWindow.WriteLine("Um weiter zu kommen müssen Sie die Eingabetaste betätigen")  
    TextWindow.Read()
Else
    TextWindow.WriteLine("Versuchen Sie es bitte noch einmal")  
    TextWindow.Clear()
    Goto start
EndIf

TextWindow.Clear()
TextWindow.Write("Ihr Vorname komplett kleingeschrieben und ohne ä,ö oder ü - diese bitte durch ae,oe oder ue ersetzen. ")  
Vorname = TextWindow.Read()
TextWindow.Write("Ihr Nachname ")  
Nachname = TextWindow.Read()
TextWindow.Write("Ihr Gewünschtes Passwort ")  
Passwort = TextWindow.Read()
TextWindow.Clear()

VornameKlein = Text.ConvertToLowerCase(Vorname)
NachnameKlein = Text.ConvertToLowerCase(Nachname)
NachnameKurz = Text.GetSubText(NachnameKlein, 1, 1)

Benutzername = VornameKlein + NachnameKurz
Daten = File.ReadContents(Datei)

If Text.IsSubText(Daten, Delim + VornameKlein + Delim + NachnameKlein) Then
    TextWindow.WriteLine("Sie sind bereits angemeldet!")  
    TextWindow.Read()
    TextWindow.Clear()
    Goto start	
EndIf

i = 2
L = Text.GetLength(NachnameKlein)
While (Text.IsSubText(Daten, VornameKlein + NachnameKurz + Delim) And (i <= L))
    NachnameKurz = NachnameKurz + Text.GetSubText(NachnameKlein, i, 1)
    i = i + 1
EndWhile
If (i > L + 1) Then
    TextWindow.WriteLine("Benutzername bereits vorhanden!")  
    TextWindow.Read()
    TextWindow.Clear()
    Goto start	
EndIf

Anmeldename = VornameKlein + NachnameKurz

File.AppendContents(Datei, Anmeldename + Delim + Passwort + Delim + VornameKlein + Delim + NachnameKlein)

TextWindow.WriteLine("Vielen Dank " + Vorname + " " + Nachname + " ")  
TextWindow.WriteLine("Ihr Passwort wurde gesetzt und ist wahrscheinlich ab Anfang nächster Woche freigeschaltet.")  
TextWindow.WriteLine("Ihr Anmeldename ist: " + Anmeldename)  
TextWindow.WriteLine("Bitte drücken Sie die Eingabetaste, damit der nächste Nutzer seine Daten eingeben kann.")  
TextWindow.Read()
TextWindow.Clear()
Goto start
Grüße
bastla
Member: bahnhof
bahnhof Apr 02, 2012 at 15:04:58 (UTC)
Goto Top
Vielen Dank.
Das funktioniert
Mit freundlichen Grüßen
bahnhof
Member: bastla
bastla Apr 02, 2012 at 17:10:26 (UTC)
Goto Top
Hallo bahnhof!

Das ist schön. face-smile

Optimierungspotenzial habe ich Dir aber natürlich noch gelassen face-wink - 2 Beispiele dafür:

Das öfters benötigte Ausgeben einer Meldung zB ließe sich bessesr per Unteprogramm ("Sub") erledigen - weiterhin ungetestet etwa:
Sub Message
TextWindow.WriteLine(AusgabeText) 
TextWindow.Read() 
TextWindow.Clear()
EndSub
[Edit] Da offensichtlich keine Parameter an ein Unterprogramm übergeben werden können, müsste vor dem Aufruf bereits der Ausgabetext in die Variable "AusgabeText" geschrieben werden - die Ersparnis an Code durch die Verwendung des Unterprogramms hält sich dann natürlich in Grenzen, es ist aber leichter möglich, durch eine einzige Änderung alle Meldungen anders darstellen zu lassen (zB durch temporäre Änderung der Schriftfarbe, ...), sodass ich trotzdem den Einsatz eines "Sub" empfehlen würde. [/Edit]

Die "Anmeldungs"-Datei müsste eigentlich vor dem allerersten Durchlauf bereits existieren - auf die Schnelle habe ich keine passende Abfragemöglichkeit auf "FileExists()" gefunden, sodass als Workaround vielleicht ein
File.AppendContents(Datei, "")
für Sicherheit sorgen könnte (die Datei soll ja ohnehin erstellt werden) ...
Außerdem wäre noch zu überlegen, die beiden Zahlenwerte in Zeile 20 vorweg als Variablen mit Zufallszahlen zu befüllen - damit wird das Ganze weniger vorhersehbar ...

Grüße
bastla
Member: bahnhof
bahnhof Apr 02, 2012 at 17:38:47 (UTC)
Goto Top
Hallo,
Bitte nehm es mir nicht übel aber ich habe mich übers Wochenende angefangen das Programm nocheinmal neuzuschreiben wa da aber nicht im Internet und das hatt jetzt mehr funktionen und ist fast vertig. Wenn mann Small Basic verstanden hatt ist das recht einfah.