Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zahlenwerte aus String auslesen ! (https://www.delphipraxis.net/56150-zahlenwerte-aus-string-auslesen.html)

needatip 1. Nov 2005 14:34


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 ?
:(

Bernhard Geyer 1. Nov 2005 14:40

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 RegEx gehen.

Pseudemys Nelsoni 1. Nov 2005 14:52

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;

needatip 1. Nov 2005 14:56

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:
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;
aber gibt es nicht eine einfachere, elegantere Lösung alle beide Werte auf einmal auszulesen ?

Thanatos81 1. Nov 2005 15:14

Re: Zahlenwerte aus String auslesen !
 
Delphi-Quellcode:
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;
Nun sollten breite und hoehe die richtigen Werte beinhalten, bzw. jeweils -1 falls der String fehlerhaft war.

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.

Pseudemys Nelsoni 1. Nov 2005 15:19

Re: Zahlenwerte aus String auslesen !
 
Ich versteh Dein Problem nicht, dann machs doch so?

Delphi-Quellcode:
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;
Falsche übergaben an "GetImageSize" sind hier nicht berücksichtigt.

needatip 1. Nov 2005 15:21

Re: Zahlenwerte aus String auslesen !
 
:hello:
Super, einwandfrei.
Danke.

Thanatos81 1. Nov 2005 15:29

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 21:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz