Donnerstag, 9. Februar 2012

yab - Größer einer Datei ermitteln

Nachdem ich Euch vor einiger Zeit gezeigt habe wie man das Datum und die Uhrzeit einer Datei ermitteln kann, möchte ich Euch heute zeigen wie man auch die Größe einer Datei herausfindet. Wege zu diesem Ziel gibt es sicherlich recht viele und so habe ich mir einmal zwei herausgesucht. Der erste, klassische, Weg wird wahrscheinlich häufiger beschritten. Der zweite Weg den ich Euch zeigen möchte basiert hingegen auf einem Beitrag aus der jüngeren Vergangenheit, nämlich "Haiku - Text- Ausgaben unter Kontrolle.
Die Quelltexte sind wieder mit reichlich Kommentaren gespickt und so sollte das Verständnis für die Zusammenhänge auch nicht zu kurz kommen.


Beispiel 1 - der klassische Weg


export sub _GetFileSize(Filename$)

  // Variablen definieren
  local SystemInput$
  local NumberOfTokens
  local Result

  dim Position$(1)

  // prüfen ob die angegebene Datei existiert
  if (not system("test -e " + Filename$)) then

    // den Befehl "LS -l" ausführen und Ausgabe in SystemInput$ speichern
    SystemInput$ = system$("ls -l " + Filename$)

    // SystemInput$ in die einzelnen Bestandteile zerlegen
    NumberOfTokens = split(SystemInput$, Position$(), " .")

    // an Position 5 (Dateigröße) steht die gewünschte Information
    Result = val(Position$(5))

  else

    // wenn Datei nicht gefunden, Ergebnis = 0 
    Result = 0

  endif

    // Ergebnis zurückliefern 
    return Result

end sub


Beispiel 2 - ein etwas anderer Weg


export sub _GetFileSize(Filename$)

  // Variablen definieren
  local SystemInput$
  local Result

  dim Position$(1)

  // prüfen ob die angegebene Datei existiert
  if (not system("test -e " + Filename$)) then

    // den Befehl "LS -l [Dateiname] | awk '{print $5}'" ausführen
    // und Ausgabe in SystemInput$ speichern
    SystemInput$ = system$("ls -l " + Filename$ + " | awk '{print $5}'")

    // in diesem Fall enthält SystemInput$ bereits den richtigen Wert
    Result = val(trim$(SystemInput$))

  else

    // wenn Datei nicht gefunden, Ergebnis = 0 
    Result = 0

  endif

  // Ergebnis zurückliefern
  return Result

end sub


Beide Sub- Routinen liefern das gleiche Ergebnis und können z.B. mit dem folgenden Befehl aufgerufen werden.


print _GetFileSize("[Pfad zur entsprechenden Datei]")


(getestet mit Haiku R1 Alpha 3 und yab 1.5)

Keine Kommentare:

Kommentar veröffentlichen