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

Anfängerfragen zum Programmieren mit PureBasic.
Poser
Beiträge: 33
Registriert: 09.03.2005 21:02

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

Beitrag 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, ...)?
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag 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]
Poser
Beiträge: 33
Registriert: 09.03.2005 21:02

Beitrag von Poser »

Schrägstrich als Delimiter nehmen? Nunja :mrgreen:
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag 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
Poser
Beiträge: 33
Registriert: 09.03.2005 21:02

Beitrag von Poser »

Naja aber was machst Du wenn im Text selber einige / vorkommen?

Dann kommt ja alles durcheinander...
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag 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.
glubschi90
Beiträge: 274
Registriert: 04.09.2004 01:43
Wohnort: Würzburg

Beitrag 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. ;-)
PureBasic 4.30
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

da gibts nur das problem wenn in dem Text ein Zeilenumbruch vorkommt.
glubschi90
Beiträge: 274
Registriert: 04.09.2004 01:43
Wohnort: Würzburg

Beitrag 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:
PureBasic 4.30
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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 ;) 
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten