![]() |
Zahlenwerte aus String auslesen !
Hallo,
ich möchte aus jeweils einem String 2 Zahlenwerte auslesen. d.h. aus einem String = '640 x 480' sollen 2 Integerwerte werden int1 = 640 (steht für die Bildbreite) int2 = 480 (steht für die Bildhöhe) wer kann mir dabei helfen ? :( |
Re: Zahlenwerte aus String auslesen !
Wie kompliziert können die Strings werden?
Für dein beispiel würde ich einfach leerzeichen mittels Pos suchen und dan mit Copy und StrToInt die Teil ausschneiden und umwandeln. Falls komplizierter ist mußt Du evtl. über ![]() |
Re: Zahlenwerte aus String auslesen !
Delphi-Quellcode:
function GetTok(const S: string; const N: Integer; const C: Char): string;
var SLen: Integer; SIdx: Integer; NTok: Integer; ResIdx: Integer; begin Result := ''; if (S <> '') and (N > 0) then begin SLen := Length(S); NTok := 0; ResIdx := 0; SetLength(Result, SLen); for SIdx := 1 to SLen do begin if ((SIdx = 1) and (S[SIdx] <> C)) or ((S[SIdx] <> C) and ((S[SIdx-1] = C))) then Inc(NTok); if (NTok = N) and (S[SIdx] <> C) then begin Inc(ResIdx); Result[ResIdx] := S[SIdx]; end; end; SetLength(Result, ResIdx); end; end; ... procedure irgendwas; const Str: string = '640 x 480'; ScreenWidth, ScreenHeigth: Integer; begin ScreenWidth := StrToInt(GetTok(Str, 1, #32)); ScreenHeigth := StrToInt(GetTok(Str, 3, #32)); // nun haben ScreenWidth und ScreenHeigth die werte. end; |
Re: Zahlenwerte aus String auslesen !
Nein, nicht komplizierter.
Es sind immer nur 2 Zahlenpaare, die mit ' x ' (Leerzeichen,x,Leerzeichen) getrennt sind. Also 160 x 120 320 x 240 640 x 480 1024 x 768 Den ersten Zahlenwert kann ich so auslesen:
Delphi-Quellcode:
aber gibt es nicht eine einfachere, elegantere Lösung alle beide Werte auf einmal auszulesen ?
function lbPicSize(picsize:string):integer;
var i : integer; s : string; b : string; begin b := ''; s := picsize; begin while s[i]<>'x' do begin b:= b+s[i]; inc(i); end; b := trim(b); result :=StrToInt(b); end; |
Re: Zahlenwerte aus String auslesen !
Delphi-Quellcode:
Nun sollten breite und hoehe die richtigen Werte beinhalten, bzw. jeweils -1 falls der String fehlerhaft war.
procedure PicSize(picsize: String; var aWidth, aHeight : Integer);
var x : Integer; begin x := Pos(' x ',picSize); aWidth := StrToIntDef(Copy(picSize,0,x-1),-1); aHeight := StrToIntDef(Copy(picSize,x+3,length(picSize)),-1); end; procedure TForm1.Button1Click(Sender : TObject); var breite, hoehe : Integer; begin picSize('640 x 480',breite,hoehe); end; Konnte es jetzt gerade nicht testen, da ich just kein Delphi zur Hand hab... Aber wenn der String wirklcih 'Breite x Hoehe' ist sollte es funktionieren, evenntuell noch x := Pos(' x ',picSize); durch 'x := Pos(' x ',lowerCase(picSize));' ersetzen falls es nicht immer kleine x sind. |
Re: Zahlenwerte aus String auslesen !
Ich versteh Dein Problem nicht, dann machs doch so?
Delphi-Quellcode:
Falsche übergaben an "GetImageSize" sind hier nicht berücksichtigt.
type
TImageSize = record Width: Integer; Height: Integer; end; function GetImageSize(const ImageSize: string): TImageSize; var Index, I: Byte; begin Index := 0; for I := 1 to Length(ImageSize) do begin if ImageSize[I] = ' ' then Inc(Index); case Index of 0: Result.Width := Result.Width + ImageSize[I]; 2: Result.Height := Result.Height + ImageSize[I]; end; end; end; procedure irgendwas; var ImageSize: TImageSize; begin ImageSize := GetImageSize('1024 x 768'); ShowMessage(IntToStr(ImageSize.Width)); ShowMessage(IntToStr(ImageSize.Height)); end; |
Re: Zahlenwerte aus String auslesen !
:hello:
Super, einwandfrei. Danke. |
Re: Zahlenwerte aus String auslesen !
Welche Variante hast du denn jetzt genommen? Naja, auf jeden Fall: Keine Ursache ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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