Seite 1 von 2

20 Texte in eine Datei? In 20 Dateien? Oder Datenbank?

Verfasst: 18.03.2005 21:34
von Poser
Hallo,

es geht um die Verwaltung von 20 verschiedenen Texten,
die der User nach belieben abändern kann.

Natürlich könnte man einfach für jeden Text 20 normale
.txt-Dateien anlegen, aber das ist ja eher unprofessionell.

Alles in eine Datei untereinander und getrennt durch
Sprungmarken wie bei einer .ini wären super, gibt es
dafür schon fertige Befehle?

Oder wie sieht es aus mit einer richtigen Datenbank?
Geht sowas OHNE das der User irgendwelche speziellen
Programme installiert haben muss (Access, SQL, ...)?

Verfasst: 18.03.2005 22:01
von zigapeda
In einer Text datei hab ich schon mal einen Code geschrieben. Die Textdatei müsste dann so oder so ähnlich aussehen:
[ anfang der 20 Texte
] ende der 20 Texte
/ trennung der einzelnen texte
also z.B. so:
[text1/text2/ ... /text19/text20]

Verfasst: 18.03.2005 22:03
von Poser
Schrägstrich als Delimiter nehmen? Nunja :mrgreen:

Verfasst: 18.03.2005 22:09
von zigapeda
Ja du kannst auch nur [ nehmen ich hab so was ähnliches auch schon programmiert aber nur für Daten da kommt kein / for also.

Code: Alles auswählen

ReadFile(0,"Text.txt")
text$ = ReadString()
lpos = 0
Dim text.s(20)
For b = 0 To 19
  If lpos = 0
    pos1 = FindString(text$,"[",1)
    pos2 = FindString(text$,"/",1)
    lange = pos2 - pos1 - 1
    text(0) = Mid(text$,pos1 + 1,lange)
  Else
    pos1 = FindString(text$,"/",lpos)
    pos2 = FindString(text$,"/",lpos + 1)
    lange = pos2 - pos1 - 1
    text(b) = Mid(text$,pos1 + 1,lange)
  EndIf
  If b = 15
    pos1 = FindString(text$,"/",lpos)
    pos2 = FindString(text$,"]",lpos)
    lange = pos2 - pos1 - 1
    text(19) = Mid(text$,pos1 + 1,lange)
  EndIf
  lpos = pos2
Next b
Wenn du das / ändern willst musst du das hald auch im code ändern

Verfasst: 18.03.2005 22:39
von Poser
Naja aber was machst Du wenn im Text selber einige / vorkommen?

Dann kommt ja alles durcheinander...

Verfasst: 18.03.2005 23:00
von zigapeda
Ich sag ja wenn du das ändern willst musst du das im code auch ändern. Du kannst meinetwegen auch [dasisteintexttrennzeichen] nehmen. Das kommt in einem Normalen Text nicht vor.

Verfasst: 18.03.2005 23:18
von glubschi90

Code: Alles auswählen

Dim Texte.s(19)

 ; Texte() mit Texxten füllen z.B.
Texte(0)="Hallo!"
Texte(1)="Wie geht's?"
 ; usw...

CreateFile(0,"C:\Test.txt")

For i=0 To 19
  WriteStringN(Texte(i))
Next

CloseFile(0)

;-------------

ReadFile(0,"C:\Test.txt")

For i=0 To 19
  Texte(i)=ReadString()
Next

CloseFile(0)

 ; Und jetzt kann Texte() ausgelesen werden...
Debug Texte(0)
Debug Texte(1)
 ; o.Ä.
:roll:

Hoffe, das hilft. ;-)

Verfasst: 18.03.2005 23:36
von zigapeda
da gibts nur das problem wenn in dem Text ein Zeilenumbruch vorkommt.

Verfasst: 18.03.2005 23:43
von glubschi90

Code: Alles auswählen

Dim Texte.s(19)

 ; Texte() mit Texxten füllen z.B.
Texte(0)="Hallo!"
Texte(1)="Wie geht's?"
 ; usw...

For i=0 To 19
  ReplaceString(Texte(i),Chr(13)+Chr(10),Chr(25))
  ReplaceString(Texte(i),Chr(10),Chr(25))
Next

CreateFile(0,"C:\Test.txt")

For i=0 To 19
  WriteStringN(Texte(i))
Next

CloseFile(0)

;-------------

ReadFile(0,"C:\Test.txt")

For i=0 To 19
  Texte(i)=ReadString()
Next

CloseFile(0)

For i=0 To 19
  ReplaceString(Texte(i),Chr(25),Chr(13)+Chr(10))
Next

 ; Und jetzt kann Texte() ausgelesen werden...
Debug Texte(0)
Debug Texte(1)
 ; o.Ä.
:mrgreen:

Was besseres fällt mir im Moment nich' ein... *gääääääähhnn* :coderselixir:

Verfasst: 19.03.2005 08:53
von DarkDragon
Soll die Textdatei dann auch vom User lesbar sein? Wenn nicht könnte man doch einfach mit WriteData alles reinschreiben und mit ReadByte lesen. :P

Code: Alles auswählen

Dim Text.s(19) ;Array mit 20 Strings

;Schreibe unterschiedliche Texte in den Array
For k=0 To 19
  Text(k) = "Dies ist Text Nr.: "+Str(k+1)
Next

If CreateFile(0, "C:\test.txt") ;Erstelle die Datei
  For k=0 To 19
    WriteData(@Text(k), Len(Text(k))+1) ;Schreib alles rein
  Next
  CloseFile(0)
EndIf

;Den Array leeren
For k=0 To 19
  Text(k) = ""
Next

If ReadFile(1, "C:\test.txt") ;Datei auslesen
  ;Nützliche Variablen auf 0 setzen
  char.b = 0
  k = 0
  While Eof(1) = 0
    char = ReadByte()
    If char = 0 ;Wenn das ausgelesene byte 0 ist(0 = ende eines Strings)...
      Debug Text(k) ;...dann gib den vorherigen Text aus oder...
      k + 1
    Else
      Text(k) + Chr(char) ;...füge dem Textarray das byte als Zeichen hinzu.
    EndIf
  Wend
  CloseFile(1)
EndIf

DeleteFile("C:\test.txt") ;Lösche diese unnötige Datei ;)