Textfile *.txt Bearbeiten

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Textfile *.txt Bearbeiten

Beitrag von Velindos »

Hallo Kiffi,
danke für die rasche Antwort. Werde mich gleich an die Sache machen. Liege ich richtig wenn ich den Vorschlag als Procedur aufbaue, um Ihn zum ImageToString und StringToImage verwenden kann.
Bin mir bei den Variablen noch nicht ganz klar. Auch beim Übernehmen des Bildes aus dem ImageGadget muss ich noch düfteln.
Liege ich richtig wenn ich jetzt zum Beispiel 255 Datensätze speichere/Lade, die Bilder in $Form zu verwalten und den Bildaufbau mit der enc/dec Prozedure erledige.
Werde mich jetzt hinsetzen und meine grauen Wölkchen anregen und gesagtes Umfzusetzen.

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Textfile *.txt Bearbeiten

Beitrag von Kiffi »

Velindos hat geschrieben:Auch beim Übernehmen des Bildes aus dem ImageGadget muss ich noch düfteln.
Du willst ImageGadget-Bilder encoden? Wozu?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Textfile *.txt Bearbeiten

Beitrag von Velindos »

Hallo,
die Sache ist die! Ich möchte Bilder und Texte in mein ImageGagdet(Drag&Drop) ziehen, das funktioniert, anschliessend will ich die Bilder+Texte unter ID verwalten. Hier kommt das Coden vor.
Ich stelle mir vor das ImageGadget zu String zu machen und mittels ImageString$(a) zu verwalten.
Nun habe ich dein Beispiel genommen und ein Bild eingelesen, mit deiner Routine zu Bildstring$ gemacht und in der Datei.txt gespeichert.
Anschliessend habe ich mit Laden die Datei(sprich nur die erste Zeile) einlesen wollen, hier meldet er plötzlich"Kann Datei nicht öffnen". Keine Ahnung, hilfe gesucht!!!

Code: Alles auswählen

Procedure Speichern()
  ;UTF-16LE mit Signatur (BOM) gespeichert.
  
  anzahl=1 ;Für eine Zeile speichern
  
  If CreateFile(1,DateiSpeichern$)                  ;[1]OpenFile(#PB_Any,"Daten.txt")
    
    WriteStringFormat(1, #PB_Unicode)
    
    For a=0 To anzahl
            
      Speicher$ = Abbildung$+#TAB$+BildString$
         
      WriteStringN(1,Speicher$, #PB_Unicode)
      
      Debug "Datei wurde gespeichert"
         
    Next
    
    CloseFile(1)
    
    ;StatusBarText(0,0,"Daten erfolgreich gespeichert "+FormatDate("%hh:%ii:%ss", Date()),#PB_StatusBar_Center )
    
  EndIf
  
EndProcedure
Procedure Laden

Code: Alles auswählen

Procedure Laden()
  ; Datei UTF-16LE mit Signatur (BOM) gespeichert.
  Define Zeile.s  
  Define Usage
  Define Quit
  Define VVE
  Global Dim Ausgabe.s(999)
  
  
  Usage = ReadFile(#PB_Any, DateiLaden$)                            ; Pfad anpassen!
  ;Usage = ReadFile(#PB_Any, "c:\Datei0.txt")                            ; Pfad anpassen!
  
  a=0
  
  If Usage
    
    ReadStringFormat(Usage)
    
    While Not Eof(Usage)                              ; Wir öffnen die Datei pbtutorial.txt zum Lesen
      
      ;[1] Zeile=Str(a):Zeile = Zeile+"   "
      
      text$ = ReadString(Usage, #PB_Unicode); Wir lesen die Zeichen auf Zeile 
      Debug text$
      Abbildung$= StringField(text$, 1, #TAB$)  ;Abildung
      ImageString$= StringField(text$, 2, #TAB$)  ;Image
      
      Debug Abbildung$
      anzahl = a 
      a=a+1;zähler erhöhen
      
    Wend
    ;[*] MessageRequester("Text","Text: "+Ausgabe(1),0)                    ; Nun zeigen wir die Zeichen an 
    CloseFile(Usage)   
    ;StatusBarText(0,0,"Daten erfolgreich eingelesen"+FormatDate("%hh:%ii:%ss", Date()),#PB_StatusBar_Center )
    ; 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
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Textfile *.txt Bearbeiten

Beitrag von Velindos »

Hallo,
noch ein Nachtrag zum Thema "EditorGadget". Wenn ich Text hereinziehe macht es keinen Zeilenumbruch sondern blendet einen Scroll-Balken ein. Geht es nicht das es mit einen Zeilenumbruch den Text darstellt und er Scrollbalken für die vertikale verwendet wird?

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Textfile *.txt Bearbeiten

Beitrag von Kiffi »

Velindos hat geschrieben:Ich möchte Bilder und Texte in mein ImageGagdet(Drag&Drop) ziehen, das funktioniert, anschliessend will ich die Bilder+Texte unter ID verwalten.
das ist ziemlich umständlich. Erst lädst Du das Bild in das ImageGadget und
versuchst dann, das Bild dort wieder herauszuporkeln, um daraus einen
Base64-String zu basteln.

Wenn Du ein Bild in Dein ImageGadget droppst, dann hast Du ja bereits einen
Dateinamen, den Du dann der Encoder-Prozedur übergeben kannst.

Code: Alles auswählen

EnableExplicit

Procedure.s DateiZuBase64String(BildDatei.s)
  
  Protected Dateikanal
  Protected SpeicherPufferGroesse
  Protected SpeicherPuffer
  Protected Base64String.s
  
  Dateikanal = ReadFile(#PB_Any, BildDatei)
  
  If Dateikanal
    SpeicherPufferGroesse = Lof(Dateikanal)
    SpeicherPuffer = AllocateMemory(SpeicherPufferGroesse)
    
    If SpeicherPuffer
      ReadData(Dateikanal, SpeicherPuffer, SpeicherPufferGroesse)
      Base64String = Space(SpeicherPufferGroesse * 2)
      Base64Encoder(SpeicherPuffer, SpeicherPufferGroesse, @Base64String, StringByteLength(Base64String))
      FreeMemory(SpeicherPuffer)
    Else
      Debug "!SpeicherPuffer"
    EndIf
    
    CloseFile(Dateikanal)
    
  Else
    Debug "!ReadFile"
  EndIf
  
  ProcedureReturn Base64String
  
EndProcedure

Define DateiAlsBase64String.s

DateiAlsBase64String = DateiZuBase64String([DateinameDesGedropptenBildes])
Grüße ... Kiffi

// Edit: Bzgl. des Problems in Deinem Nachtrag könnte dieser Thread helfen
a²+b²=mc²
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Textfile *.txt Bearbeiten

Beitrag von Velindos »

Hallo,
Habe die Sache nicht richtig erklärt. Also, ich ziehe das Bild in das ImageGadget und lös ein Drop Ereignis aus. Funktioniert. Aber wie komme ich an das Bild wie unter DataSection [Image0]. Wenn ich [GadgetImage] nicht vorbelege jammert er.
Weiters möchte ich dann [Image0, Gadgetimage…….] über den Coder schicken und anschliessend speichern.

Code: Alles auswählen

Enumeration    ; Images
  #ImageGadget
  #GadgetImage
EndEnumeration

;- Image Globals
Global Image0
Global GadgetImage

;- Catch Images
Image0 = CatchImage(0, ?Image0)
GadgetImage = CatchImage(1, ?GadgetImage)

;- Images
DataSection
  Image0:  IncludeBinary "C:\Versuch.bmp"
  GadgetImage: IncludeBinary "C:\Velindos.bmp"
EndDataSection


ImageGadget(#ImageGadget,280, 42, 205, 155, ImageID(#ImageBild), #PB_Image_Border)
:::::::::

EnableGadgetDrop(#ImageGadget,#PB_Drop_Image,#PB_Drag_Copy)

Case #ImageGadget     
   If EventDropImage(#ImageGadget)
          GadgetImage=  ImageGadget(#ImageNummer,280, 42, 205, 155, ImageID(##ImageGadget), #PB_Image_Border)

2.Problem Zeilenumbruch habe ich was falsch verstanden?

Case #TargetNotiz
;EditorGadget(#TargetNotiz, 275, 290, 285, 95, EventDropText())
;AddGadgetItem(#myListIconGadget, -1, Zeile)
SendMessage_(#TargetNotiz, EventDropText(), #Null, #True) ;#True oder 1 für an, #False oder 0 für aus

AddGadgetItem(#TargetNotiz, -1, EventDropText())
Akt_Notiz$=EventDropText()

Gruss … Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Textfile *.txt Bearbeiten

Beitrag von Vera »

Hallo Velindos,

für den Zeilenumbruch hab' ich Dir mal ein kleines Beispiel gemacht.
Apropos: PB-Befehle als Flags ist auch eine interessante Idee - aber leider nicht implementiert ;)

Code: Alles auswählen

Enumeration
  #TargetNotiz
EndEnumeration

OpenWindow(0, 40, 110, 440, 280, "Drop and Wrap", #PB_Window_SystemMenu)
EditorGadget(#TargetNotiz, 10, 10, 420, 260)
EnableGadgetDrop(#TargetNotiz, #PB_Drop_Text, #PB_Drag_Copy) 
AddGadgetItem(#TargetNotiz, 1, "drop text into Gadget- drop text into Gadget- drop text into Gadget- drop text into Gadget- drop text into Gadget- drop text into Gadget- ")
AddGadgetItem(#TargetNotiz, -1, "here:"+Chr(13))

Repeat
  wwe = WaitWindowEvent()
  Select wwe
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_GadgetDrop 
      If EventDropType() = #PB_Drop_Text
        Select EventGadget()
          Case #TargetNotiz
            AddGadgetItem(#TargetNotiz, -1, EventDropText())
            SendMessage_(GadgetID(#TargetNotiz), #EM_SETTARGETDEVICE, #Null, 0)
        EndSelect
      EndIf
  EndSelect
Until wwe= #PB_Event_CloseWindow
cheers ~ Vera
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Textfile *.txt Bearbeiten

Beitrag von Velindos »

Hallo Vera,

habe gerade deinen Entwurf getest und sieht wirklich Gut aus, der Funkt. Werde Ihn morgen in mein Programm übernehmen und darüber Posten. Erstmal vielen Dank für dein Hilfe!!!

Habe jetzt nur noch das Problem mit meinen ImageGagdet, das ich das gedropte Bild einer Variable(Image0..etc) zuweise.

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Textfile *.txt Bearbeiten

Beitrag von Velindos »

Hallo,
hab noch eine offene Frage. Da ich zur Zeit meine "installierte Software" über den CCleaner abfrage und eine Datei erstelle, würde mich interessieren ob es eine Möglichkeit in PB gibt, die "installierte Software" von Windows direkt über PB auszulesen?

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten