Italia
Fonte/ Codesnippets

Fclose Fopen

 
Aha also müsste ein echtes XProfan10 fopen/fclose so aussehen:
KompilierenMarkierenSeparieren
proc fopen

    parameters fle$,mode$
    declare h&
    h&=assign(fle$)

    if mode$="r"

        reset h&

    elseif mode$="w"

        rewrite h&

    elseif mode$="a"

        append h&

    elseif mode$="b"

        openrw h&

    endif

    return h&

endproc

proc fclose

    parameters h&
    close h&
    assign h&,""

endproc

?
 
02.05.2006  
 




Michael
Wodrich
Ja, dann ists klar. Und mit iFs drumherum-Funktionen werden sich auch die C-Indianer hier wohl fühlen.

Allerdings kann zu Fuß programmiert ein weiteres Assign bei obigem Beispiel von Roland entfallen.

Das eine ist gut per weitere Bearbeitung, das andere ist gut per sofortige Handle-Freigabe.

Danke
Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
02.05.2006  
 




RGH
[quote:4504e32796=iF]Aha also müsste ein echtes fopen/fclose so aussehen: ...[/quote:4504e32796]
Korrekt!
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
02.05.2006  
 




H.Brill
Irgendwas scheint aber nicht frei gegeben zu werden.
Beim erneuten Schreiben in un mit OpenRW geöffneten
File, ist der letzte DS doppelt drin, wenn die zu schreibenden
Daten weniger sind. Also statt 3 DS nur noch 2 drin stehen sollten.
Declare Long datei, Memory Waren[]
Set("Decimals", 2)
Struct Artikel = Name$(30), Preis!
Dim Waren[], Artikel
SetSize Waren[], 3
datei = Assign($ProgDir + "Waren.dat")
OpenRW datei

With Waren[0]

    Waren[0].Name$ = "Milch"
    Waren[0].Preis! = 0.99

EndWith

With Waren[1]

    Waren[1].Name$ = "Butter"
    Waren[1].Preis! = 2.25

EndWith

With Waren[2]

    Waren[2].Name$ = "Käse"
    Waren[2].Preis! = 3.55

EndWith

Print "\nAus dem Array gelesen :"
AusgabeArray()
Speichern()
Print "\nTaste per Dateiausgabe..."
WaitKey
Ausgabe()
Print "\nDelete Satz Nr. 2 in Datei"
WaitKey
Arrdel Waren[], 1, 1
Print "\nAusgabe Array nach ArrDel"
Waitkey
AusgabeArray()
Speichern()
Print "\nNach Speichern der neuen File."
Ausgabe()
WaitKey

Proc Speichern

    Declare Long offset
    Assign #1, $ProgDir + "Waren.dat"
    Erase #1
    Close #1
    Assign #1, ""
    Assign #1, $ProgDir + "Waren.dat"
    OpenRW #1
    offset = 0

    WhileLoop 0, SizeOf(Waren[]) - 1

        BlockWrite #1, Waren[&LOOP]
        Inc offset, 35

    EndWhile

    Close #1
    Assign #1, ""

EndProc

Proc Ausgabe

    Declare Long Records
    Assign #1, $ProgDir + "Waren.dat"
    OpenRW #1
    Records = GetFileSize(#1) / 34
    Clear Waren[]
    SetSize Waren[], Records
    Seek #1, 0

    WhileLoop 0, Records - 1

        BlockRead(#1, Waren[&LOOP], 0, SizeOf(Waren[&LOOP]))

        With Waren[&LOOP]

            Print "Artikel :", .Name$, "Preis : ", .Preis!

        EndWith

    EndWhile

    Close #1
    Assign #1, ""

EndProc

Proc AusgabeArray

    WhileLoop 0, SizeOf(Waren[]) - 1

        With Waren[&LOOP]

            Print "Artikel : ", Waren[&LOOP].Name$, "Preis :", Waren[&LOOP].Preis!

        EndWith

    EndWhile

    Speichern()

EndProc

End

Scheint so, als wäre ein profaninterner Speicherbereich, der nicht oder
nicht vollständig zurück gesetzt wurde, beteiligt. Die File wird ja vor
dem erneuten Schreiben gelöscht.
ArrDel funktioniert mal jedenfalls richtig.
Was mir noch aufgefallen ist : Erst, wenn ich die File mit dem Explorer
gänzlich gelöscht habe, sind auch die Reste vom Dateiende verschwunden.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
29.11.2023  
 




Georg
Teles
Nabend,

schau mal in Zeile 7, füge einfach mal nach OpenRW datei

solange die File "doppelt geöffnet" ist, scheint XProfan die alte Dateigröße von 177 Bytes statt neuen 78 auszulesen, weil diese gesperrt ist, so wird sie auch mit Erase nicht gelöscht, daher verzwickt sich das

dann klappts

dein ganzer Code:
Declare Long datei, Memory Waren[]
Set("Decimals", 2)
Struct Artikel = Name$(30), Preis!
Dim Waren[], Artikel
SetSize Waren[], 3
datei = Assign($ProgDir + "Waren.dat")
OpenRW datei
Close datei

With Waren[0]

    Waren[0].Name$ = "Milch"
    Waren[0].Preis! = 0.99

EndWith

With Waren[1]

    Waren[1].Name$ = "Butter"
    Waren[1].Preis! = 2.25

EndWith

With Waren[2]

    Waren[2].Name$ = "Käse"
    Waren[2].Preis! = 3.55

EndWith

Print "\nAus dem Array gelesen :"
AusgabeArray()
Speichern()
Print "\nTaste per Dateiausgabe..."
WaitKey
Ausgabe()
Print "\nDelete Satz Nr. 2 in Datei"
WaitKey
Arrdel Waren[], 1, 1
Print "\nAusgabe Array nach ArrDel"
Waitkey
AusgabeArray()
Speichern()
Print "\nNach Speichern der neuen File."
Ausgabe()
WaitKey

Proc Speichern

    Declare Long offset
    Assign #1, $ProgDir + "Waren.dat"
    Erase #1
    Close #1
    Assign #1, ""
    Assign #1, $ProgDir + "Waren.dat"
    OpenRW #1
    offset = 0

    WhileLoop 0, SizeOf(Waren[]) - 1

        BlockWrite #1, Waren[&LOOP]
        Inc offset, 35

    EndWhile

    Close #1
    Assign #1, ""

EndProc

Proc Ausgabe

    Declare Long Records
    Assign #1, $ProgDir + "Waren.dat"
    OpenRW #1
    Records = GetFileSize(#1) / 34
    Clear Waren[]
    SetSize Waren[], Records
    Seek #1, 0

    WhileLoop 0, Records - 1

        BlockRead(#1, Waren[&LOOP], 0, SizeOf(Waren[&LOOP]))

        With Waren[&LOOP]

            Print "Artikel :", .Name$, "Preis : ", .Preis!

        EndWith

    EndWhile

    Close #1
    Assign #1, ""

EndProc

Proc AusgabeArray

    WhileLoop 0, SizeOf(Waren[]) - 1

        With Waren[&LOOP]

            Print "Artikel : ", Waren[&LOOP].Name$, "Preis :", Waren[&LOOP].Preis!

        EndWith

    EndWhile

    Speichern()

EndProc

End

Grüße
Georg
 
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

30.11.2023  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

3.180 Views

Untitledvor 0 min.
E.T. vor 23 Tagen
Jens-Arne Reumschüssel05.07.2024
GDL22.05.2024
Thomas Freier06.01.2024
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie