CreateFile (überschreibt Datei nicht !)

Anfängerfragen zum Programmieren mit PureBasic.
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Re: CreateFile (überschreibt Datei nicht !)

Beitrag von Simon74 »

OK, warum auch immer, so funktionierts.

Code: Alles auswählen

Procedure CreateMETA()
  If File$
    Protected.s MetaFile$
    Protected.s Text_Channel$ = GetGadgetText(Text_Channel)
    OpenServiceReference()
    MetaFile$ = ReplaceString(File$,".txt","")
    If GetGadgetState(400) = #PB_Checkbox_Unchecked
      MetaFile$ = SaveFileRequester("META speichern unter ...", MetaFile$+".meta", "meta (*.meta)|*.meta", 1)
    Else
      MetaFile$ = MetaFile$ + ".meta"
    EndIf
    If MetaFile$
      ;Liste durchsuchen
      ForEach SRList()
        If SRList()\Channel = Text_Channel$
          Protected Servicename$ = (SRList()\Service)
        EndIf
      Next
      If CreateFile(2,MetaFile$)
        WriteStringN(2, Servicename$)
        WriteStringN(2, GetGadgetText(Text_Title))
        WriteStringN(2, GetGadgetText(Text_Genre))
        WriteStringN(2, Str(UnixTime()))
        CloseFile(2)  
      EndIf
    EndIf
  EndIf 
EndProcedure
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: CreateFile (überschreibt Datei nicht !)

Beitrag von ts-soft »

Du verwendest Variablen für Deine Gadgets, sind diese Global?

Nächstes mal bitte einen vollständig ausführbaren Code, so hat das ganze keinen Zweck!
Selber nen ausführbaren Code zu schreiben, wie Derren es gemacht hat, erspare ich mir
grundsätzlich, es ist sehr, sehr unwahrscheinlich, das ich denselben Fehler einbaue :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Re: CreateFile (überschreibt Datei nicht !)

Beitrag von Simon74 »

ts-soft hat geschrieben:Du verwendest Variablen für Deine Gadgets, sind diese Global?
Ja, sonst wäre ich wohl schon früher gestolpert <)

Code: Alles auswählen

Global Label_Channel, Label_Date, Label_Description, Label_Duration, Label_Genre, Label_Size, Label_Time, Label_Title
Global Text_Channel, Text_Date, Text_Description, Text_Duration, Text_Genre, Text_Size, Text_Time, Text_Title
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: CreateFile (überschreibt Datei nicht !)

Beitrag von ts-soft »

Simon74 hat geschrieben:Ja, sonst wäre ich wohl schon früher gestolpert <)
Was nützt das ganze, wenn wir die Info nicht haben?
Ohne vollständigen, ausführbaren Code, mit den Infos zu OS und Compiler-Settings,
müssen wir Nachfragen oder vermuten. Bessere Hilfe erhälst Du in jedem Falle, wenn
bereits im erstem Thread alle Infos vorhanden sind :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: CreateFile (überschreibt Datei nicht !)

Beitrag von Derren »

Simon74 hat geschrieben:OK, warum auch immer, so funktionierts.
Unterschied: Alter Code:

Code: Alles auswählen

ForEach Liste()
  If expression
    WriteStringN()
  Endif
Next
Neuer Code:

Code: Alles auswählen

ForEach Liste()
  If Expression
    Condition
  Endif
Next

If Condition
  WriteString()
Endif
Alles klar?
Signatur und so
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: CreateFile (überschreibt Datei nicht !)

Beitrag von Kiffi »

Simon74 hat geschrieben:OK, warum auch immer, so funktionierts.
damit umgehst Du nur den Bug, den Du an anderer Stelle selber verursachst.

Wie geschrieben: Du wirst mit Sicherheit Deine SRList() mit jedem Speichervorgang um einen (überflüssigen) Eintrag erweitern.

gib mal testweise Servicename$ aus:

Code: Alles auswählen

[...]
      ;Liste durchsuchen
      ForEach SRList()
        If SRList()\Channel = Text_Channel$
          Protected Servicename$ = (SRList()\Service)
          Debug Servicename$
        EndIf
      Next
[...]
Ich wette (um eine kleine Fanta ohne Eis), dass mit jedem Speichervorgang eine Debug-Ausgabe hinzu kommt.

Grüße ... Kiffi
a²+b²=mc²
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Re: CreateFile (überschreibt Datei nicht !)

Beitrag von Simon74 »

Wo darf ich die Fanta servieren ? :)
Der Code erstellt jedesmal einen weiteren Eintrag, richtig.

Code: Alles auswählen

[...]
      ;Liste durchsuchen
      ForEach SRList()
        If SRList()\Channel = Text_Channel$
          Protected Servicename$ = (SRList()\Service)
          Debug Servicename$
        EndIf
      Next
[...]
Wie kann ich die Liste einfach nur durchsuchen, ohne das ein Eintrag zugefügt wird ?
Muss hier FindString verwendet werden ?
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: CreateFile (überschreibt Datei nicht !)

Beitrag von CSHW89 »

Der Fehler entsteht nicht hier. Wie meine Vorredner schon sagten, ohne vollständigen Code kann man da nicht helfen. Wo fügst du denn neue Elemente hinzu? Wo rufst du AddElement bzw. InsertElement auf?

lg kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Re: CreateFile (überschreibt Datei nicht !)

Beitrag von Simon74 »

Die Liste wird in eigener Prozedur "OpenServiceReference()" gefüllt.

Code: Alles auswählen

Procedure OpenServiceReference()
  If ReadFile(1, "servicereference.txt")
    While Eof(1) = 0
      Protected Zeile$ = ReadString(1)
      Protected istpos=FindString(Zeile$,"=",1)
      AddElement(SRList())
      SRList()\Channel = Left(Zeile$,istpos-1)
      SRList()\Service = Mid(Zeile$,istpos+1)
    Wend
    CloseFile(1)
  Else
    MessageRequester("Information","Datei servicereference.txt nicht vorhanden, meta kann so nicht erstellt werden !")
  EndIf
EndProcedure
Ausgelöst wird diese Procedure wieder von, siehe Code von erstem Post (auf dieser Website)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: CreateFile (überschreibt Datei nicht !)

Beitrag von Kiffi »

zwei Möglichkeiten:

* OpenServiceReference() nur einmal ausführen.

* vor dem Öffnen Deiner 'servicereference.txt' ein ClearList(SRList()) ausführen.

Grüße ... Kiffi
a²+b²=mc²
Antworten