Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Dateigröße ermitteln
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 182

BeitragVerfasst am: 29.08.2014, 19:48    Titel: Dateigröße ermitteln Antworten mit Zitat

N'Abend Gemeinde!

Wollte mal nachfragen, wie ich mit QB die Größe einer gerade zu schreibenden bzw. geschriebenen ermitteln kann. Und ob ich das novh vor oder während des Speicherns tun kann. Möchte nämlich in die Datei ihre ursprüngliche Speichergröße schreiben.

grüsse nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4214
Wohnort: ~/

BeitragVerfasst am: 29.08.2014, 19:56    Titel: Antworten mit Zitat

ich bin in QBasic nicht so drin, aber ich so weit ich weiß, gab es auch da schon LOF.
http://www.freebasic-portal.de/befehlsreferenz/lof-342.html
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 182

BeitragVerfasst am: 29.08.2014, 20:03    Titel: Antworten mit Zitat

äHmm! LOF?
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4214
Wohnort: ~/

BeitragVerfasst am: 29.08.2014, 22:06    Titel: Antworten mit Zitat

Len Of File
Siehe Referenzlink.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 182

BeitragVerfasst am: 30.08.2014, 18:28    Titel: Antworten mit Zitat

Hi nemored!

Ganz so bequem bin ich nun auch nicht. Aber: Da klappt nichts.
Habe lof(1) aufgerufen und in Variable gespeichert, die ich dann ausdrucken wollte. Aber da ging nichts. Keine Fehlermeldung. Kein Ausdruck. Nichts.

Gib mir doch mal bitte eine Zeile, die die gerade geöffnete Datei nach ihrer Größe befragt und in Variablen ableg.

grüsse Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 83

BeitragVerfasst am: 30.08.2014, 18:39    Titel: Antworten mit Zitat

Code:
dim l as long
dim Datei as string

datei = "c:\deinedatei"

open datei for input as #1
l = lof(1)
close

print "Dateilänge: "; l
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 182

BeitragVerfasst am: 10.09.2014, 20:35    Titel: Antworten mit Zitat

Hi Horst D:

Danke, das probier ich man.
Kann ich denn das Ergebnis gleich in dieselbe datei schreiben? Ich meine so zwecks veränderungsübersicht?

Dank nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 182

BeitragVerfasst am: 12.09.2014, 14:32    Titel: Antworten mit Zitat

@ HorstD

Hi Horst!

Die Sache hat auf Anhieb geklappt!
Habe dann im Programm ab der Zeile nach der Prozedur die Datei mit open for append gleich wieder aufgerufen und die Dateigröße eingefügt. Nur habe ich ja mit dem letzten Schritt nochmals die Dateigröße verändert und das nicht berücksichtigt!
Kann ich da irgendwie die Bytegöße meines Eintags berücksichtigen, so daß der Eintrag mit der tatsächlichen Dateigröße nach erfolgten Eintrag übereinstimmt? Was meinst Du?

grüsse Nils (aus der grau in grauen Stadt am vielen Wasser)
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 12.09.2014, 23:06    Titel: Antworten mit Zitat

HorstD hat Folgendes geschrieben:
Code:
dim l as long
dim Datei as string

datei = "c:\deinedatei"

open datei for input as #1
l = lof(1)
close

print "Dateilänge: "; l

Da wir es an einer anderen Stelle von der Verwendung von FUNCTION und SUB hatten, gleich für diesen Fall ein Musterbeispiel:
Code:
' für QB geschrieben!

FUNCTION Dateilaenge&(datei$)
  fh% = FREEFILE
  OPEN datei$ FOR INPUT AS fh%
  Dateilaenge& = LOF(fh%)
  CLOSE fh%
END FUNCTION

PRINT Dateilaenge&("C:\VERZ\MEINEDAT.DAT")
PRINT Dateilaenge&("C:\VERZ\ANDERED.TXT")

d.h. Du hast quasi einen neuen Befehl (Funktion) geschrieben, die überall verwendet werden kann, wo die Dateilänge bestimmt werden, ohne eine Datei explizit öffnen zu müssen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 182

BeitragVerfasst am: 13.09.2014, 10:44    Titel: Antworten mit Zitat

@dreael:

Ähm: Freefile? Meinedat.dat? andered.txt ?

Recht kryptisch für mich!

Aber davon abgesehen: Löst das mein Problem?



grüsse nils (aus der Stadt mit dem nilselregen)
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 860
Wohnort: Ruhrpott

BeitragVerfasst am: 13.09.2014, 11:34    Titel: Antworten mit Zitat

@Nils:
Heißer Tip von mir:
    QBasic-Editor öffnen ---> "Hilfe" anklicken ---> "Index" anklicken ---> unbekannten Befehl suchen und anklicken ---> lesen!
So eine Befehlsreferenz ist nämlich ein nichtendenwollender Quell wertvollen Wissens.

Und bei einem Wort mit Punkt drin, mit 3 Buchstaben hinter dem Punkt, das am Ende einer Zeichenfolge steht, in der sich weiter links ein Buchstabe gefolgt von einem Doppelpunkt und einem Backslash befindet, handelt es sich mit an Sicherheit grenzender Wahrscheinlichkeit um einen Dateinamen mit Pfadangabe. zwinkern

Zitat:
Löst das mein Problem?
Nein, dreael hat "nur" versucht, dir die Funktionsweise einer Function zu erklären.

Wenn du nicht gerade hunderte solcher Dateien hast, empfehle ich dir folgendes Vorgehen: Zuerst öffnest du die Datei im Editor (so, als ob du programmieren möchtest). Dann suchst du dieselbe Datei im Explorer, dann Rechtsklick auf die Datei und Klick auf "Eigenschaften". Die dort aufgeführte Größe schreibst du in die Datei und speicherst sie ab. Dann öffnest du noch einmal die Eigenschaften, siehst dir die Größe an (sie wird sich verändert haben), korrigierst den Wert im Editor entsprechend und speicherst die Datei wieder ab. Das wiederholst du so lange, bis beide Werte übereinstimmen. Das ist nicht sehr elegant, aber es müsste funktionieren.

Gruß
grindstone (es gibt kein schlechtes Wetter, es gibt nur ein undichtes Dach)
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 182

BeitragVerfasst am: 13.09.2014, 13:29    Titel: Antworten mit Zitat

@ grindstone:

da hast Du bedingt Recht mit dem Nutzen des Befehlssatzes. Leider sind die Verfasser nur bedingt sprachgewaltig gewesen, sonst wären da nicht so viele unklarheiten drinnen. Und über eines sind wir uns doch wohl alle klar: Programmieren können heißt noach lange nicht das auch erklären zu können. Schon gar nicht das unmißverständlich erklären können. Ihr kennt doch noch alle die 5kg Beilagen zu den früheren Programmen. Das wiegt F1 nicht auf. Schon gar nicht in der Übersetzung.
Diesen Klick hin und her Vorschlag hab' ich mal in meiner Joke-Truhe versenkt!

ciao
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 860
Wohnort: Ruhrpott

BeitragVerfasst am: 13.09.2014, 14:18    Titel: Antworten mit Zitat

Nils hat Folgendes geschrieben:
Leider sind die Verfasser nur bedingt sprachgewaltig gewesen, sonst wären da nicht so viele unklarheiten drinnen
Ein bisschen selber denken mußt du schon. Daß das am Anfang nicht ganz einfach ist, ist auch klar, aber Übung kriegt man nur durch Üben. Und daß in solchen Referenzen alles drinsteht, nur nicht das, was man wissen will, ist völlig normal und ändert sich auch später nicht (nur, daß das Ganze dann auch noch auf englisch ist). zwinkern

Zitat:
Diesen Klick hin und her Vorschlag hab' ich mal in meiner Joke-Truhe versenkt!
Das war nicht als Witz gemeint. Wenn du nur 2 oder 3 Dateien kennzeichnen möchtest, ist das der einfachste Weg.

Ansonsten wäre es hilfreich, wenn du etwas genauer beschreiben würdest, was du vorhast.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 182

BeitragVerfasst am: 13.09.2014, 18:29    Titel: Antworten mit Zitat

@ grindstone:

Ich will in die noch zu speiernde Datei ihre Speichergröße eintragen. So zur Kontrolle. Wenn ich aber mit lof() die Größe ermittle und danach die Datei wieder öffne, den Eintrag vornehme und wieder speichere, dann ist die Datei wegen des Größeneintrages größer geworden, ohne dass ich das erfasst hätte.
Ich könnte ja mit len() die Größe des Eintrags ermitteln und dazuzählen. Aber len() gibt mir ja die Zeichenanzahl, nicht die Byteanzahl zurück.
Außerdem vermute ich , dass es da genauere Kentnisse des Speicherungsvorganges bedarf.
Wie ist das denn? 10 Byte als Datei gespeichert brauchen doch genaussoviel Platz wie die kleineste ansprechbare Speichereinheit auf der Platte?
Was sagt mit denn die Größenangabe zB 86kB?

nice weekend Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 860
Wohnort: Ruhrpott

BeitragVerfasst am: 13.09.2014, 20:48    Titel: Antworten mit Zitat

Ein QBasic - Script ist lesbarer Text, d.h. jedes Zeichen belegt exakt 1 Byte, jeder Zeilenumbruch 2 Bytes. Wenn du also (ohne Einrückung) die Zeile
Code:
dateigroesse% = 4199
einfügst, wird das Programm um 22 Bytes länger (wenn ich mich nicht verzählt habe).

Die Größenangabe "86kB" sagt dir, daß die Datei ungefähr 86 * 1024 = 88064 Bytes groß ist. "Ungefähr" deshalb, weil kB-Angaben (fast) immer gerundet sind. Für die genaue Größe brauchst du die Angabe in Bytes.

Der Platz, den eine Datei auf der Festplatte benötigt, hängt mit deren Organisation in Clustern ("Zuordnungseinheiten") zusammen. Darauf hast du als Programmierer keinen Einfluss.
http://de.wikipedia.org/wiki/Cluster_%28Datentr%C3%A4ger%29
http://www.userchannel.de/sonntagsseite/newsseite.php?datum=15.06.2003&newsID=295

Deshalb wird bei den Eigenschaften einer Datei ja auch immer die Dateigröße und die Größe auf dem Datenträger angegeben.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 182

BeitragVerfasst am: 15.09.2014, 09:35    Titel: Antworten mit Zitat

Moin grindstone:

Ich hab' da noch ein paar Fragen:

- Kann ich irgendwie erreichen, dass mir die Dateigröße in Bytes angegeben wird, also ungerundet? (QB/Windows7linux)

- Kann ich denn die Position ab der ein Eintrag in einer Datei erfolgt ist abfragen?

- Haben denn QB erzeiugte und gespeicherte Dateien einen besonderen Header oder Anhang. Falls ja: Wie mach ich den sichtbar?

Ansonsten bin ich der Lösung auf der Spur'; brauche aber Deine Antworten.

grüsse aus der sonnigen Stadt am vielen wasser

nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 860
Wohnort: Ruhrpott

BeitragVerfasst am: 15.09.2014, 11:00    Titel: Antworten mit Zitat

Zitat:
- Kann ich irgendwie erreichen, dass mir die Dateigröße in Bytes angegeben wird, also ungerundet?
Natürlich. Rechtsklick auf die Datei und dann Klick auf "Eigenschaften". In dem erscheinenden Fenster ist unter der Rubrik "Größe" die Dateigröße angegeben. Zuerst in kB bzw. MB, und dahinter in Klammern die exakte Größe in Bytes.

Aus dem Programm heraus kannst du das mit
Code:
OPEN "c:\programm.bas" FOR INPUT AS #1
PRINT LOF(1)
CLOSE #1
machen. Die Datei muß natürlich schon abgespeichert sein.
Zitat:

- Kann ich denn die Position ab der ein Eintrag in einer Datei erfolgt ist abfragen?
Code:
OPEN "c:\programm.bas" FOR INPUT AS #1
DO
     PRINT SEEK(1) '<--Dateizeiger vorher
     LINE INPUT #1, g$
     PRINT g$
     PRINT SEEK(1) '<--Dateizeiger nachher
     PRINT
LOOP UNTIL EOF(1)
CLOSE #1

Zitat:
- Haben denn QB erzeiugte und gespeicherte Dateien einen besonderen Header oder Anhang.
Nein. Ein QBasic-Script ist ganz normaler Text. Öffne mal ein QBasic - Programm im Notepad!

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 925
Wohnort: Austria

BeitragVerfasst am: 16.09.2014, 22:32    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Zitat:
- Haben denn QB erzeiugte und gespeicherte Dateien einen besonderen Header oder Anhang.
Nein. Ein QBasic-Script ist ganz normaler Text. Öffne mal ein QBasic - Programm im Notepad!

Zu beachten ist hier, dass es auch ein Binärformat für BAS Dateien in einigen QB Versionen gab. In QBX 7.1 gab es das z.B. und ich glaube auch in QB 4.5 - wobei die im Binärformat gespeicherten Dateien teilweise zwischen den unterschiedlichen BASIC Versionen nicht kompatibel waren und nicht geöffnet werden konnten (!).
Also darauf achten, dass die Dateien im Textformat gespeichert werden (beim Speichern kann man das auswählen, wenn es von der verwendeten QB Version unterstützt wird).
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 182

BeitragVerfasst am: 17.09.2014, 18:39    Titel: Antworten mit Zitat

@ grindstone:

Hmm, in Deinem code-Beispiel ist da g$ der Dateieintrag?
Und ab welcher Stelle beginnt dann in Deinem Beispiel der letzte Eintrag in die Datei? Mir scheint in Deinem Beispiel wird das Ende des letzten Eintrages ermittelt. Das ist ja mein Knackpunkt. Ich will nämlich zweimal die Dateigröße reinschreiben. Nach dem ersten Mal ermittle ich die Dateigröße, dann brauch' in nur noch den vorigen Dateieintrag zu überschreiben und meine tatsächliche Dateigröße stimmt mit der in der Daetei eingetragenen überein.

grüsse nils (aus der sommerwarmen Stadt mit dem vielen Wasser)
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 860
Wohnort: Ruhrpott

BeitragVerfasst am: 18.09.2014, 02:06    Titel: Antworten mit Zitat

Zitat:
in Deinem code-Beispiel ist da g$ der Dateieintrag?
Richtig. Und der Dateizeiger zeigt immer auf das erste Zeichen, das mit der nächsten INPUT - Anweisung ausgelesen wird. Entsprechend zeigt er nach der INPUT - Anweisung auf die Stelle hinter dem letzten Zeichen, das ausgelesen wurde.
Zitat:
Und ab welcher Stelle beginnt dann in Deinem Beispiel der letzte Eintrag in die Datei?
Das kommt darauf an, was du als "Eintrag" betrachtest. Wenn du den letzten Befehl meinst, der beginnt bei 202 und endet bei 211. Danach kommt dann noch eine Leerzeile (die der QBasic-Editor beim Abspeichern automatisch anhängt), die bei 212 beginnt und 2 Bytes lang ist (Zeilenumbruch, Chr$(13)+Chr$(10)).

Zitat:
Nach dem ersten Mal ermittle ich die Dateigröße, dann brauch' in nur noch den vorigen Dateieintrag zu überschreiben und meine tatsächliche Dateigröße stimmt mit der in der Daetei eingetragenen überein.
Ganz so einfach ist es nicht. Wenn du im ersten Durchgang die Platzhalter für die korrekte Größe hineinschreibst und die Datei beispielsweise 999 Bytes lang war, dann überschreitest du durch das Hinzufügen der Platzhalter die 1000-Byte-Grenze und hast anschließend für die "echte" Größe einen Platzhalter zuwenig. Diese mögliche Längenänderung mußt du berücksichtigen.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz