![]() |
Delphi-Version: 5
KB zu Bytes umwandeln
Hallo,
ich stehe zur Zeit auf dem Schlauch und komme einfach nicht weiter... Und zwar habe ich folgendes Problem: Von einem externen Problem bekomme ich eine Dateigröße als String im Format 463.433 kB Diesen Wert möchte ich jetzt in Byte-Größe umwandeln im Int64-Format. Ich habe mir jetzt folgendes gedacht:
|
AW: KB zu Bytes umwandeln
Zunächst wäre mal zu klären, was der Punkt bedeutet: Ist er ein Tausendertrennzeichen oder ein Dezimaltrennzeichen(Komma)?
|
AW: KB zu Bytes umwandeln
Sieht der String so aus: "425.156 KB"? Dann schneide von hinten alles inklusive des Leerzeiches weg und entferne den Punkt mit StringReplace. Dann kannst du den String mit StrToInt in ein Integer verwandeln und mit 1024 multiplizieren. Solltest du Einfluss auf die Darstellung haben, trenne die Oberfläche von den Daten und speichere den Wert gleich als Integer und wandele ihn nur zur Darstellung um.
|
AW: KB zu Bytes umwandeln
Wenn es sich um einen Tausenderseperator handelt, dann einfach den Punkt durch einen Leerstring ersetzen.
Bei einem Fließkomma statt Int in einen Float umwandeln, der Punkt sollte dabei einfach bleiben wie er ist. Ich gehe aber davon aus, dass es ein Tausenderseperator ist. Liebe Grüße, Valentin |
AW: KB zu Bytes umwandeln
Blub
Manchmal bin ich echt blöd =( Oder auch nicht:
Delphi-Quellcode:
var
s, kb : String; dot : Integer; val : Int64; begin s := '463.433 kB'; kb := Copy(s, 1, pos(' ', s)-1); dot := Pos('.', kb); val := StrToInt(Copy(kb, 1, dot-1)) * 1024; val := val + Trunc(StrToInt(Copy(kb, dot+1, Length(kb)-dot)) * 1024/1000); ShowMessage(Format('%s'#13#10'bytes'#9'%d'#13#10'kbytes'#9'%.2f', [s, val, val/1024])); end; |
AW: KB zu Bytes umwandeln
Vielen Dank für eure Antworten :)
Also es handelt sich um ein Fließkomma. Ich habe mir folgende Funktion gebastelt:
Delphi-Quellcode:
Leider hapert es aber noch bei "Result := tmpSize*1024;".
function Kb2Byte(SrcKb: String): Int64;
var tmpSize: Double; begin if TryStrToFloat(SrcKb, tmpSize) = True then begin Result := tmpSize*1024; end else begin Result := 0; end; end; Den Wert muss ich irgendwie noch in Int64 umwandeln... |
AW: KB zu Bytes umwandeln
Hallo,
wenn Du den Wert in Byte vorliegen hast, dann kann es keine Nachkommastelle mehr geben. Du kannst diese also einfach abschneiden z.B. mit trunc. Grüße Klaus |
AW: KB zu Bytes umwandeln
Vielen lieben Dank für die schnelle und kompetente Hilfe :)
|
AW: KB zu Bytes umwandeln
Delphi-Quellcode:
function Kb2Byte(SrcKb: String): Int64;
var tmpSize: Double; begin Result := 0; if TryStrToFloat(SrcKb, tmpSize) then Result := Trunc(tmpSize *1024); end; |
AW: KB zu Bytes umwandeln
Bin ich der einzige, der der Meinung ist, dass hier eine Exception ausgelöst werden sollte, wenn die Konvertierung fehlschlägt? Man sucht den Fehler nämlich hinterher u.U. ewig, wenn das Programm aus unerfindlichen Gründen bei manchen Dateien die falsche Dateigröße anzeigt...
Also wenn schon, dann so:
Delphi-Quellcode:
Aber abgesehen davon, ist Aphtons Lösung die korrekte, da sie mit einbezieht, dass die Nachkommastellen nur bis 999 gehen, und nicht bis 1024.
function Kb2Byte(SrcKb: String): Int64;
var tmpSize: Double; begin if TryStrToFloat(SrcKb, tmpSize) then Result := Trunc(tmpSize*1024) else raise EConvertError.CreateFmt('"%s" is not a valid file size', [SrcKb]); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz