Seite 4 von 6

Re: Textfile *.txt Bearbeiten

Verfasst: 18.11.2010 14:19
von Velindos
Hallo Kiffi,
Danke, danke, danke, wie konnte mir das nur passieren! Du bist SUPER.............

Ansonsten funkt die Sache, bis auf wenn ich die Datei wieder einlese habe ich plötzlich ein LF????

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, DateinameLaden$)                            ; 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,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,Dateiname$)                  ;[1]OpenFile(#PB_Any,"Daten.txt")

;WriteStringN(1 ,Str(anzahl), #PB_Unicode) 		;[1]WriteStringN(1,Str(anzahl))

  For a=0 To anzahl
    ;Debug Software$(a)
    ;speicher$=Software$(a)+#TAB$+Hersteller$(a)+#TAB$+Datum$(a)+#TAB$+Umfang$(a)+#TAB$+Version$+#TAB$+#LF$
    ;speicher$ = text$(a)
    speicher$=Software$(a)+#TAB$+Hersteller$(a)+#TAB$+Datum$(a)+#TAB$+Umfang$(a)+#TAB$+Version$+#TAB$+#LF$

    ;text$(a)=ReplaceString(speicher$,#LF$,#TAB$,#PB_String_NoCase)
    ;Debug speicher$
    
    WriteStringN(1,speicher$, #PB_Unicode)
    ;Debug WriteStringN
    ;WriteStringFormat(1, #PB_Unicode)

  Next

CloseFile(1)

StatusBarText(0,0,"Daten erfolgreich gespeichert "+FormatDate("%hh:%ii:%ss", Date()),#PB_StatusBar_Center )

EndIf

EndProcedure
Kommt aber nicht ganz klar. damit.
2. Frage wenn das Programm läuft, kann man ein Icon in die Taskleiste zaubern?????

Nochmals danke, im diesem Sinn
Gruss :bounce: .............Velindos

Re: Textfile *.txt Bearbeiten

Verfasst: 18.11.2010 14:19
von ts-soft
@c4s
FF und WWE sind aber "Standard-Kiffi" Variablen und somit eindeutig :mrgreen:

Re: Textfile *.txt Bearbeiten

Verfasst: 18.11.2010 14:43
von Velindos
Hallo,
danke für die tolle Unterstützung, werde es nachholen. Jungs, ich will nicht der spitzen Programmierer werden, sonder mir nur ein paar Utilitys schreiben lernen, aber in Grund habt ihr Recht und ich bin happy. Bis auf den genannten Problem mit dem LF läuft die Sache, im folge der Code, viele Spass!

Code: Alles auswählen

; German forum:
; Author: Olli B (updated for PB4.00 by blbltheworm)
; Date: 02. August 2002
; OS: Windows
; Demo: Yes


;Weiteres über Daten laden und speichern
;von Olli, August 2002


;Variablen definieren
Global Dim text$(999):Global anzahl
Global Dateiname$:
Global DateinameLaden$ ="C:\Install.txt"
Global Dim Software$(999)
Global Dim Hersteller$(999)
Global Dim Datum$(999)
Global Dim Umfang$(999)
Global Dim Version$(999)  




;Fenster und Gadget-Liste
If OpenWindow(0,100,100,400,520,"Daten laden/speichern",#PB_Window_SystemMenu)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(1,10,10,120,20,"Laden C:\Install.txt")
    ButtonGadget(8,10,30,120,20,"Laden C:\InstallRev1.txt")
    ButtonGadget(2,140,10,150,20,"Speichern C:\InstallRev1.txt")
    ButtonGadget(7,140,30,150,20,"Speichern C:\InstallRev2.txt")
    ButtonGadget(3,300,10,100,20,"Löschen")
    ButtonGadget(8,300,30,100,20,"Exit")
            ListViewGadget(4,20,60,360,380)
    ButtonGadget(5,20,460,150,20,"Ein Element hinzufügen")
    ButtonGadget(6,240,460,140,20,"Letztes Element löschen")
    TextGadget(9, 20, 40, 105, 20, "Created by Velindos")
    TextGadget(10, 15, 445, 365, 20, "Deinstallierbare Software über CCleaner Datei erstellen und bearbeiten")
    EndIf
Else
  MessageRequester("","Fenster konnte nicht geöffnet werden!",0)
EndIf

;StatusBar öffnen
If CreateStatusBar(0,WindowID(0))
  AddStatusBarField(500)
EndIf

;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, DateinameLaden$)                            ; Pfad anpassen!
;FF = ReadFile(#PB_Any, "c:\Datei0.txt")                            ; Pfad anpassen!

a=0



If FF
  
      ReadStringFormat(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,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,Dateiname$)                  ;[1]OpenFile(#PB_Any,"Daten.txt")
  
  WriteStringFormat(1, #PB_Unicode)
;WriteStringN(1 ,Str(anzahl), #PB_Unicode) 		;[1]WriteStringN(1,Str(anzahl))

  For a=0 To anzahl
    ;Debug Software$(a)
    ;speicher$=Software$(a)+#TAB$+Hersteller$(a)+#TAB$+Datum$(a)+#TAB$+Umfang$(a)+#TAB$+Version$+#TAB$+#LF$
    ;speicher$ = text$(a)
    speicher$=Software$(a)+#TAB$+Hersteller$(a)+#TAB$+Datum$(a)+#TAB$+Umfang$(a)+#TAB$+Version$+#TAB$+#LF$

    ;text$(a)=ReplaceString(speicher$,#LF$,#TAB$,#PB_String_NoCase)
    ;Debug speicher$
    
    WriteStringN(1,speicher$, #PB_Unicode)
    ;Debug WriteStringN
    ;WriteStringFormat(1, #PB_Unicode)

  Next

CloseFile(1)

StatusBarText(0,0,"Daten erfolgreich gespeichert "+FormatDate("%hh:%ii:%ss", Date()),#PB_StatusBar_Center )

EndIf

EndProcedure

;Zum eigentlichen Programmstart: Laden aufrufen
Laden()

;Das erste Element der Liste aktivieren
SetGadgetState(4,0)


Repeat
  EventID.l = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      
      ;Schalter LADEN
      If EventGadget()=1
        DateinameLaden$="C:\Install.txt"
        ClearGadgetItemList(4):Laden()
      EndIf
      
      ;Schalter LADEN
      If EventGadget()=8
        DateinameLaden$="C:\InstallRevision1.txt"
        ClearGadgetItemList(4):Laden()
      EndIf
      
      ;Schalter SPEICHERN .txt
      If EventGadget()=2
        Dateiname$= "C:\InstallRevision1.txt"
        Speichern()
      EndIf      
      
      ;Schalter SPEICHERN InstallRev2.txt
      If EventGadget()=7
        Dateiname$= "C:\InstallRevision2.txt"
        Speichern()
      EndIf      
      
      ;Schalter LISTE LÖSCHEN
      If EventGadget()=3
        ClearGadgetItemList(4)
        StatusBarText(0,0,"Liste gelöscht "+FormatDate("%hh:%ii:%ss", Date()),#PB_StatusBar_Center )
      EndIf
      
      ;Schalter EXIT
      If EventGadget()=8
        End
      EndIf
      
      ;Schalter NEUER EINTRAG
      If EventGadget()=5
        anzahl=anzahl+1
        Software$(anzahl)="Neuer Eintrag "+FormatDate("%hh:%ii:%ss", Date())
        AddGadgetItem(4,anzahl,Software$(anzahl))
        ;text$(anzahl)="Neuer Eintrag "+FormatDate("%hh:%ii:%ss", Date())
        ;AddGadgetItem(4,anzahl,text$(anzahl))
      EndIf
      
      ;Schalter LETZTEN EINTRAG LÖSCHEN
      If EventGadget()=6
      If anzahl>=0
        RemoveGadgetItem(4,anzahl)
        anzahl=anzahl-1
      EndIf
      EndIf
             
     EndIf

Until EventID = #PB_Event_CloseWindow   

End 

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
; EnableXP
; DisableDebugger
Gruss ......... :bluescreen: Velindos

Re: Textfile *.txt Bearbeiten

Verfasst: 18.11.2010 15:02
von ts-soft
Velindos hat geschrieben:Hallo,
danke für die tolle Unterstützung, werde es nachholen. Jungs, ich will nicht der spitzen Programmierer werden, sonder mir nur ein paar Utilitys schreiben lernen, aber in Grund habt ihr Recht und ich bin happy. Bis auf den genannten Problem mit dem LF läuft die Sache, im folge der Code, viele Spass!
Gerade für kleine Utilitys benötigst Du besonderes Wissen! In kleinen Anwendungen oder Spielen, greifst
Du ja nur auf Deine eigenen Dateien zu, da gibts dann seltener Probleme, z.B. mit dem Format, aber
gerade Utilitys, die auf fremde Dateien, Registry-Einträge oder ähnliches zugreifen sind viele Dinge zu beachten.

Ansonsten sieht Dein Code schon besser aus, als zu Anfang. Aber Du mußt da noch ein bissel dran arbeiten.

Gruß
Thomas

Re: Textfile *.txt Bearbeiten

Verfasst: 18.11.2010 15:27
von Andesdaf
Velindos hat geschrieben:2. Frage wenn das Programm läuft, kann man ein Icon in die Taskleiste zaubern?????
Das Icon kannst du im IDE-Menü unter "Compiler" und "Compiler-Optionen"
einstellen.

Falls du einen Eintrag im SysTray-Bereich rechts meinst schau dir mal
die Hilfe zum Thema SysTray an.

Gruß Andesdaf

Re: Textfile *.txt Bearbeiten

Verfasst: 18.11.2010 16:19
von Kiffi
ts-soft hat geschrieben:@c4s
FF und WWE sind aber "Standard-Kiffi" Variablen und somit eindeutig :mrgreen:
:lol: :allright:

Re: Textfile *.txt Bearbeiten

Verfasst: 18.11.2010 17:03
von Velindos
Hallo Jungs,
danke für die Lorbeeren und die Tips.

Zum Thema wenn ich die Datei wieder hereinlese, wie kann ich diese Sache mit dem LF loswerden?????
Grüsse ............. Velindos

Re: Textfile *.txt Bearbeiten

Verfasst: 18.11.2010 18:04
von Kiffi
Velindos hat geschrieben:Zum Thema wenn ich die Datei wieder hereinlese, wie kann ich diese Sache mit dem LF loswerden?????
Das Ersetzen der in der Datei befindlichen TAB-Trennzeichen durch LF habe ich in
meinem ersten Beispiel lediglich genannt, damit man die Zeilen ohne weitere Bearbeitung
in ein ListIconGadget einfügen kann. Dort stellt nämlich ebendieses LF das
Feld-Trennzeichen dar.

Da Du allerdings mittlerweile ein ListViewGadget verwendest (wieso eigentlich?), kannst
Du die ReplaceString()-Zeile entfernen.

Ein weiteres LF sehe ich in Deiner Speichern-Procedure.

Code: Alles auswählen

speicher$=Software$(a)+#TAB$+Hersteller$(a)+#TAB$+Datum$(a)+#TAB$+Umfang$(a)+#TAB$+Version$+#TAB$+#LF$
[...]
WriteStringN(1,speicher$, #PB_Unicode)
WriteStringN() hängt automatisch einen passenden Zeilentrenner an den zu speichernden
String. Auf diesem Grund ist das letzte #LF$ in speicher$ fehl am Platz.

Grüße ... Kiffi

Re: Textfile *.txt Bearbeiten

Verfasst: 18.11.2010 19:50
von Velindos
Hallo Kiffi!
Danke für den Tip, werde in Morgen gleich noch umsetzen und Bescheid sagen. Muss leider jetzt schon weg.
So am Rande; 1. Hat man in PureBasic auch die Möglichkeit Dateien mit Record-Handling(sprich ID pro Datensatz und über ID Schreiben und Lesen) zu programmieren. 2.Kann man auch Bilder in diese Dateien geben oder ist das sehr umständlich etc.
Nochmals besten Dank Dir und den Jungs, Ihr wart grossartig, und noch einen schönen Abend.

Gruss :lurk: ................ Velindos

Re: Textfile *.txt Bearbeiten

Verfasst: 18.11.2010 20:01
von ts-soft
Velindos hat geschrieben:1. Hat man in PureBasic auch die Möglichkeit Dateien mit Record-Handling(sprich ID pro Datensatz und über ID Schreiben und Lesen) zu programmieren.
Man hat die Möglichkeit, aber nicht Jedermann kann das umsetzen :wink:
Velindos hat geschrieben:2.Kann man auch Bilder in diese Dateien geben oder ist das sehr umständlich etc.
Man kann, aber nicht Jedermann kann das umsetzen :wink:

Im Ernst:
Hierfür nimmt man heutzutage eine Datenbank, z.B. die in PB unterstützte SQLite. Bilder (Blobs) werden auch
unterstützt. Aber Du solltest erst mal noch bei den Grundlagen bleiben, sonst wird das nix

Gruß
Thomas