Seite 3 von 6
Re: Textfile *.txt Bearbeiten
Verfasst: 17.11.2010 18:37
von ts-soft
Auf
http://www.purearea.net/pb/german/index.htm auf Tutorials klicken, sind aber teilweise veraltet, ansonsten
die Beispiele im Examples-Ordner von PB sollten eigentlich für einen Einstieg reichen, wenn man sich da durcharbeitet und probiert, ändert, hilfe guckt usw.
Gruß
Thomas
Re: Textfile *.txt Bearbeiten
Verfasst: 17.11.2010 18:47
von Velindos
Hallo Thomas,
danke für deinen Tip, werde mich mal reinknien!!!
Muss leider weg, ansonsten besten Dank für eure Tips.
Gruss .............. Velindos
Re: Textfile *.txt Bearbeiten
Verfasst: 18.11.2010 11:32
von Velindos
Hallo Leute,
habe ein Problem beim Speichern. Möchte die Daten wieder im UTF-16LE mit Signatur (BOM) speichern. Funktioniert aber nicht richtig.
Code: Alles auswählen
;Laden
Procedure Laden()
; Datei UTF-16LE mit Signatur (BOM) gespeichert.
Define Zeile.s
Define FF
Define Quit
Define WWE
Dim Ausgabe.s(999)
FF = ReadFile(#PB_Any, "c:\install.txt") ; Pfad anpassen!
a=0
If FF
While Not Eof(FF) ; Wir öffnen die Datei pbtutorial.txt zum Lesen
Zeile=Str(a):Zeile = Zeile+" "
text$(a) = ReadString(FF, #PB_Unicode); Wir lesen die Zeichen auf Zeile
Software$(a)= StringField(text$(a), 1, #TAB$) ;Software
Hersteller$(a)= StringField(text$(a), 2, #TAB$) ;Hersteller
Datum$(a)= StringField(text$(a), 3, #TAB$) ;Datum
Umfang$(a)= StringField(text$(a), 4, #TAB$) ;Umfang
Version$(a)= StringField(text$(a), 5, #TAB$) ;Version
text$(a) = ReplaceString(text$(a), #TAB$, #LF$) ; Vorkommen des 'SuchString$'zu finden
Debug StringField(text$(a), 1, " ") ;Zeigen uns Debuger an
;[1]Ausgabe(1) = AddGadgetItem(#myListIconGadget, 0, Text$ [, ImageID [, Flags]])
;AddGadgetItem(4,-1,text$(a))
AddGadgetItem(4,-1,Zeile+Software$(a))
anzahl = a
a=a+1;zähler erhöhen
Wend
;MessageRequester("Text","Text: "+Ausgabe(1),0) ; Nun zeigen wir die Zeichen an
CloseFile(FF)
; Wir schließen die Datei. Was jedoch nicht unbedingt
Else ; Wenn die Datei nicht gefunden wurde
MessageRequester("Fehler","Konnte die Datei nicht öffnen.",0) ; Fehlermeldung
EndIf
EndProcedure
;Speichern
Procedure Speichern()
;UTF-16LE mit Signatur (BOM) gespeichert.
If OpenFile(1,"C:\Daten1.txt")
;WriteStringN(1,Str(anzahl))
For a=0 To anzahl
WriteStringN(1,text$(a))
Next
CloseFile(1)
StatusBarText(0,0,"Daten erfolgreich gespeichert "+FormatDate("%hh:%ii:%ss", Date()),#PB_StatusBar_Center )
EndIf
EndProcedure
Gruss ................... Velindos
Re: Textfile *.txt Bearbeiten
Verfasst: 18.11.2010 11:41
von Kiffi
Velindos hat geschrieben:Funktioniert aber nicht richtig.
es ist immer hilfreich, wenn Du in Zukunft beschreibst,
was nicht richtig funktioniert.
ToDo für Dich: WriteStringFormat() und WriteStringN() in
der Hilfe nachschauen. Da steht ziemlich genau, was zu tun ist.
Noch ein kleiner Tipp: Nimm anstelle von OpenFile() lieber CreateFile(),
um im Vorfeld potentielle Probleme zu vermeiden.
Grüße ... Kiffi
Re: Textfile *.txt Bearbeiten
Verfasst: 18.11.2010 11:47
von Velindos
Hallo Kiffi,
danke für die Hilfe, wollte nur meine potentielle Schwäche darstellen. Werde mich ranmachen!
Gruss

Velindos
Re: Textfile *.txt Bearbeiten
Verfasst: 18.11.2010 11:50
von Velindos
Hallo Kiffi,
ist mir gerade noch eingefallen, was meine Thomas mit:
Leider hat Kiffi vergessen das "ReadStringFormat()" mit einzubauen, auch wenn das Format bereits bekannt ist,
und sei es nur, das der Dateizeiger sich hinter den BOM bewegt.
Keine Ahnung wie ich das einbaue????????
Gruss

Veldindos
Re: Textfile *.txt Bearbeiten
Verfasst: 18.11.2010 12:52
von Velindos
Hallo,
habe Procedure für Speichern fertig. Sie speichert auch, wenn ich aber die gespeicherte Datei mit meiner Prozedur einlesen will kommt die Meldung "Konnte Datei nicht öffnen", obwohl ich Sie im Notpad ohne Probleme öffnen kann????
Kann mir wer helfen!!!!!
Code: Alles auswählen
Procedure Laden()
; Datei UTF-16LE mit Signatur (BOM) gespeichert.
Define Zeile.s
Define FF
Define Quit
Define WWE
Dim Ausgabe.s(999)
;FF = ReadFile(#PB_Any, "c:\install.txt") ; Pfad anpassen!
FF = ReadFile(#PB_Any, "c:\Datei0.txt") ; Pfad anpassen!
a=0
If FF
While Not Eof(FF) ; Wir öffnen die Datei pbtutorial.txt zum Lesen
Zeile=Str(a):Zeile = Zeile+" "
text$(a) = ReadString(FF, #PB_Unicode); Wir lesen die Zeichen auf Zeile
Software$(a)= StringField(text$(a), 1, #TAB$) ;Software
Hersteller$(a)= StringField(text$(a), 2, #TAB$) ;Hersteller
Datum$(a)= StringField(text$(a), 3, #TAB$) ;Datum
Umfang$(a)= StringField(text$(a), 4, #TAB$) ;Umfang
Version$(a)= StringField(text$(a), 5, #TAB$) ;Version
text$(a) = ReplaceString(text$(a), #TAB$, #LF$) ; Vorkommen des 'SuchString$'zu finden
Debug StringField(text$(a), 1, " ") ;Zeigen uns Debuger an
;[1]Ausgabe(1) = AddGadgetItem(#myListIconGadget, 0, Text$ [, ImageID [, Flags]])
;AddGadgetItem(4,-1,text$(a))
AddGadgetItem(4,-1,Zeile+Software$(a))
anzahl = a
a=a+1;zähler erhöhen
Wend
;MessageRequester("Text","Text: "+Ausgabe(1),0) ; Nun zeigen wir die Zeichen an
CloseFile(FF)
; Wir schließen die Datei. Was jedoch nicht unbedingt
Else ; Wenn die Datei nicht gefunden wurde
MessageRequester("Fehler","Konnte die Datei nicht öffnen.",0) ; Fehlermeldung
EndIf
EndProcedure
;Speichern
Procedure Speichern()
;UTF-16LE mit Signatur (BOM) gespeichert.
If CreateFile(1,"C:\Daten0.txt") ;[1]OpenFile(#PB_Any,"Daten.txt")
;WriteStringN(1 ,Str(anzahl), #PB_Unicode) ;[1]WriteStringN(1,Str(anzahl))
For a=0 To anzahl
speicher$=Software$(a)+#TAB$+Hersteller$(a)+#TAB$+Datum$(a)+#TAB$+Umfang$(a)+#TAB$+Version$+#TAB$+#LF$
WriteStringN(1,speicher$, #PB_Unicode)
WriteStringFormat(1, #PB_Unicode)
Next
CloseFile(1)
StatusBarText(0,0,"Daten erfolgreich gespeichert "+FormatDate("%hh:%ii:%ss", Date()),#PB_StatusBar_Center )
EndIf
EndProcedure
Gruss

Velindos
Re: Textfile *.txt Bearbeiten
Verfasst: 18.11.2010 13:50
von Kiffi
Du speicherst Daten0.txt und versuchst Datei0.txt zu lesen
Den Fehler darfst Du jetzt selber suchen.
Grüße ... Kiffi
Re: Textfile *.txt Bearbeiten
Verfasst: 18.11.2010 14:14
von ts-soft
Der BOM steht immer nur einmal am Anfang der Datei! ReadStringFormat
oder WriteStringFormat werden also nur einmal, gleich nach dem Öffnen/Erstellen
ausgeführt. Hier noch ein paar Infos für die Allgemeinbildung:
http://de.wikipedia.org/wiki/Byte_Order_Mark
Gruß
Thomas
Re: Textfile *.txt Bearbeiten
Verfasst: 18.11.2010 14:18
von c4s
Ich empfehle nebenbei:
- "EnableExplicit" direkt an den Anfang zu schreiben
- Den ganzen Code richtig formatieren (Strg+A -> Rechtsklick -> "Einrückung formatieren")
- Bessere Variablennamen nutzen: FF, a, WWE ??
- Konsequent Konstanten oder besser nur #PB_Any nutzen
- Entscheiden ob du in Zukunft "a = b + c" oder "a=b+c" schreiben willst. Es sollte jedoch durchgehalten werden, um den Code leserlicher zu machen
Sicher ist aller Anfang schwer, aber so halbwegs - ohne es richtig zu verstehen (oder?) - irgendetwas zusammenzuschustern ist nicht der richtige Weg, um erfolgreich eine Programmiersprache zu erlernen.