AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zahlenwerte aus String auslesen !

Ein Thema von needatip · begonnen am 1. Nov 2005 · letzter Beitrag vom 1. Nov 2005
Antwort Antwort
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#1

Zahlenwerte aus String auslesen !

  Alt 1. Nov 2005, 15:34
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Zahlenwerte aus String auslesen !

  Alt 1. Nov 2005, 15:40
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Zahlenwerte aus String auslesen !

  Alt 1. Nov 2005, 15:52
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;
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Zahlenwerte aus String auslesen !

  Alt 1. Nov 2005, 15:56
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]<>'xdo
  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 ?
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#5

Re: Zahlenwerte aus String auslesen !

  Alt 1. Nov 2005, 16:14
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.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#6

Re: Zahlenwerte aus String auslesen !

  Alt 1. Nov 2005, 16:19
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.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Zahlenwerte aus String auslesen !

  Alt 1. Nov 2005, 16:21

Super, einwandfrei.
Danke.
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#8

Re: Zahlenwerte aus String auslesen !

  Alt 1. Nov 2005, 16:29
Welche Variante hast du denn jetzt genommen? Naja, auf jeden Fall: Keine Ursache
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 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