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 :oops: 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.