Deutsch
Quelltexte/ 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 für weitere Bearbeitung, das andere ist gut für 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 eine mit OpenRW geöffneten
Datei, 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 für 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 Datei."
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 Datei wird ja vor
dem erneuten Schreiben gelöscht.
ArrDel funktioniert mal jedenfalls richtig.
Was mir noch aufgefallen ist : Erst, wenn ich die Datei 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 Datei "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 für 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 Datei."
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


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.597 Betrachtungen

Unbenanntvor 0 min.
Thomas Freier06.01.2024
E.T.27.12.2023
HofK20.12.2023
ByteAttack16.12.2023
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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