Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   KB zu Bytes umwandeln (https://www.delphipraxis.net/160822-kb-zu-bytes-umwandeln.html)

DrD0j0 2. Jun 2011 13:33

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:
  1. Copy(WERT, 0, Pos(' ', WERT))
  2. In eine Zahl umwandeln (Hier weiß ich es nicht wegen dem .)
  3. Zahl mit 1024 multiplizieren

Namenloser 2. Jun 2011 13:39

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)?

Luckie 2. Jun 2011 13:42

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.

Valle 2. Jun 2011 13:42

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

Aphton 2. Jun 2011 14:18

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;

DrD0j0 2. Jun 2011 14:20

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:
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;
Leider hapert es aber noch bei "Result := tmpSize*1024;".
Den Wert muss ich irgendwie noch in Int64 umwandeln...

Klaus01 2. Jun 2011 14:23

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

DrD0j0 2. Jun 2011 14:43

AW: KB zu Bytes umwandeln
 
Vielen lieben Dank für die schnelle und kompetente Hilfe :)

Hobby-Programmierer 2. Jun 2011 14:45

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;

Namenloser 2. Jun 2011 14:56

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:
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;
Aber abgesehen davon, ist Aphtons Lösung die korrekte, da sie mit einbezieht, dass die Nachkommastellen nur bis 999 gehen, und nicht bis 1024.

Aphton 2. Jun 2011 15:00

AW: KB zu Bytes umwandeln
 
Zitat:

Zitat von NamenLozer (Beitrag 1104319)
Aber abgesehen davon, ist Aphtons Lösung die korrekte, da sie mit einbezieht, dass die Nachkommastellen nur bis 999 gehen, und nicht bis 1024.

Darn it... Und ich dachte mir, die sei falsch =\

generic 3. Jun 2011 08:52

AW: KB zu Bytes umwandeln
 
Streng genommen müsstest du nur mit 1000 Multiplizieren.
Wenn KiB (oder im Englischen Ki) angegeben wäre müsstest du mit 1024 Multiplizieren.

http://de.wikipedia.org/wiki/Byte

http://en.wikipedia.org/wiki/Byte

Namenloser 3. Jun 2011 13:48

AW: KB zu Bytes umwandeln
 
Das Problem ist, dass die meisten Programme kilo, mega und giga schreiben, aber kibi, mebi und gibi meinen... (man, klingen diese Binärpräfixe albern – bin ich eigentlich der einzige, der bei kibi immer an einen neuseeländischen Vogel denken muss?)

Satty67 3. Jun 2011 13:56

AW: KB zu Bytes umwandeln
 
Zitat:

Zitat von NamenLozer (Beitrag 1104457)
kibi, mebi und gibi

So klingt es wirklich seltsam, KiB/GiB/MiB finde ich aber ganz OK.

Aber ich berufe mich auf mein Alter (nicht mehr lernfähig) ich benenne weiterhin die Werte mit KB/MB und GB ;)

himitsu 3. Jun 2011 14:00

AW: KB zu Bytes umwandeln
 
Das Problem ist halt daß sich in der Digitaltechnik die 1024 für KiloByte eingebürgert haben.
Die Betriebssysteme und nahezu alle Programme rechnen so.

Nur die Festplattenhersteller haben umgestellt, da sie erkannt haben, daß ihre Datenträger so wesentlich größer klingen ... nur blöd, daß dann später viele "meckern", daß sie weniger im Explorer sehn, als draufstand.

Es war eine völlige Schnappsidee einen etablierten "Standard" umkippen zu wollen, egal wie gut diese Idee sein mag.
Man hätte sich bei sowas mit den großen Softwarefirmen zusammentun und einen Stichtag für eine großflächige Umstellung aushandeln müssen.

Oder man hätte die "neuen" kiwbis, mebis usw. eben für die 1000 einführen können.



@Satty: Sooooo alt bin ich nun auch noch nicht :roll:
Aber ich werde aus Prinzip nicht umstellen.

Was sollen denn die User denken, wenn mein Programm bei KB plötzlich mit 1000 rechnet und sonstüberall (Explorer und Co.) plötzlich "andere" Werte dastehen.
Somit mein Programm lso alles falsch anzeigt.
Wärend ich diese KiB niemals verwenden werde, da es häßlich aussieht und ungewohnt klingt.

Aphton 3. Jun 2011 15:04

AW: KB zu Bytes umwandeln
 
Zitat:

Zitat von himitsu (Beitrag 1104460)
Wärend ich diese KiB niemals verwenden werde, da es häßlich aussieht und ungewohnt klingt.

Hast du schön gesagt :thumb:

jaenicke 3. Jun 2011 15:12

AW: KB zu Bytes umwandeln
 
Zitat:

Zitat von himitsu (Beitrag 1104460)
Das Problem ist halt daß sich in der Digitaltechnik die 1024 für KiloByte eingebürgert haben.
Die Betriebssysteme und nahezu alle Programme rechnen so.

Da irrst du dich. Das gilt nur für Windows. Unter Mac OS wird das Binärprefix ebenso genutzt wie unter Linux. Da gibt es entsprechende Richtlinien und im Betriebssystem selbst wird es so benutzt. Unter Linux ist das zwar noch ein ziemliches Durcheinander mit den ganzen Tools, aber das liegt dort ja in der Natur der Sache.

Ich verwende das Binärprefix auch relativ konsequent, egal ob beim Schreiben oder in meinen Programmen.

Und ob Windows 8 tatsächlich das Binärprefix nicht nutzt, bin ich mir nicht so sicher...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 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