Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   String (https://www.delphipraxis.net/63002-string.html)

blauglaser 12. Feb 2006 16:31


String
 
Hallo zusammen,
habe doch noch eine Frage zum String, wie kann man aus diesem String "c:\test 80" nur die 80 auslesen, und an eine Variable übergeben.
Vor 80 ist ein Leerzeichen und der String ist in einer .txt, oder ist es möglich in einem String, nach einem Int-Wert zu suchen und an eine Variable zu übergeben.

ichbins 12. Feb 2006 16:35

Re: String
 
such einfach nach dem Leerzeichen und kopier dann den Text ab dem Leerzeichen. Oder alternativ: Füge alle gefundenen Zifferzeichen zusammen.

erste Methode:
Delphi-Quellcode:
var
  s:string;
begin
  for i:=length(s) downto i do
    if s[i]=' ' then
      break;
   zahl:=copy(s,i,length(s)-i);
end;
zweite Methode:
Delphi-Quellcode:
var
  s:string;
const
  ziffern='0123456789';
begin
  zahl:='';
  for i:=1 to length(s) do
    if pos(s[i],ziffern)>0 then
      zahl:=zahl+s[i];
end;

Christian Seehase 12. Feb 2006 16:43

Re: String
 
Moin Michael,

statt
Delphi-Quellcode:
zahl:=copy(s,i,length(s)-i);
kannst Du auch einfach
Delphi-Quellcode:
zahl:=copy(s,i,MaxInt);
schreiben, wenn der Rest des Strings genommen werden soll.
Copy hört sowieso auf, wenn der String zu Ende ist.
Das spart dann die Berechnung.

blauglaser 12. Feb 2006 20:23

Re: String
 
Hallo,
habe folgendes versucht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

 var
  s,zahl:string;
  i:Integer;

begin
s:='TEST 38';
  for i:=length(s) downto i do
    if s[i]=' ' then
      break;
   zahl:=copy(s,i,MaxInt);
   Label1.Caption:=zahl;
end;
end.
aber in Label wird nichts ausgegeben und eigentlich sollte doch
38 übergeben werden kann mir jemand sagen wo der Fehler liegt.

3_of_8 12. Feb 2006 20:36

Re: String
 
Ich würds eher mit downto 1 probieren.

Und da fehlt ein begin...end; ansonsten wird nur gebreakt.:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

var
  s,zahl:string;
  i:Integer;

begin
s:='TEST 38';
  for i:=length(s) downto i do
  begin
    if s[i]=' ' then
      break;
   zahl:=copy(s,i,MaxInt);
   Label1.Caption:=zahl;
  end;
end;
end.

Question_mark 12. Feb 2006 20:44

Re: String
 
Hallo blauglaser,
Zitat:

Zitat von blauglaser
kann mir jemand sagen wo der Fehler liegt

Ja, Dein Debugger sagt es Dir. Einfach mal einen Breakpoint auf Zeile 11
setzen und mit F7 durchsteppen. Du wirst Dich wundern, wie schnell die
Funktion beendet wird. :roteyes:

Gruß
Question_mark

dahead 12. Feb 2006 20:47

Re: String
 
Zitat:

Zitat von Question_mark
Hallo blauglaser,
Zitat:

Zitat von blauglaser
kann mir jemand sagen wo der Fehler liegt

Ja, Dein Debugger sagt es Dir.

Gruß
Question_mark

dein debugger sagt dir sowas? wie wärs wenn du was zum thema beiträgst oder es sein lässt?

3_of_8 12. Feb 2006 20:57

Re: String
 
Das tut er doch.

Question_mark 12. Feb 2006 21:09

Re: String
 
Hallo dahead,
Zitat:

Zitat von dahead
wie wärs wenn du was zum thema beiträgst oder es sein lässt?

Vielen herzlichen Dank für die freundliche Begrüssung hier im Forum.
Wie konnte ich als 12-jähriger, absoluter Noop es auch nur wagen, hier einfach zu posten :oops:
Ich hoffe, dass Du als absolut erfahrener, anerkannter Delphi-Experte mit so ungeheuerlich
wertvollen Forumsbeiträgen mir meinen kleinen, bescheidenen Beitrag verzeihst. Wird auch
bestimmt nicht wieder vorkommen.

Question_mark

himitsu 13. Feb 2006 12:05

Re: String
 
Kommt das nur mir so vor, oder wiederholt sich da was?

String Variable

Und dann die Thteadnamen ... geht das nicht etwas genauer? ... "String", oder "String Variable" sind ja nicht gerade aussagekräftig :warn:

alzaimar 13. Feb 2006 12:16

Re: String
 
Zitat:

Zitat von Question_mark
Hallo dahead,
Zitat:

Zitat von dahead
wie wärs wenn du was zum thema beiträgst oder es sein lässt?

Vielen herzlichen Dank für die freundliche Begrüssung hier im Forum.
Wie konnte ich als 12-jähriger, absoluter Noop es auch nur wagen, hier einfach zu posten :oops:
Ich hoffe, dass Du als absolut erfahrener, anerkannter Delphi-Experte mit so ungeheuerlich
wertvollen Forumsbeiträgen mir meinen kleinen, bescheidenen Beitrag verzeihst. Wird auch
bestimmt nicht wieder vorkommen.

Question_mark

:thumb: :thumb: :thumb: :thumb: :thumb:
Selbst wenn Du 50 wärst, wäre das ein gelungener Konter.

So, dahead. Der "Debugger sagt" soetwas natürlich nicht, weil der Debugger von Delphi nicht reden kann :mrgreen: . Ansonsten hat das Fragezeichen aber Recht, denn den Debugger benutzt man mit Menschenverstand und dann sieht man auch, wohin die Reise (bzw. der Programmcounter) geht.

Ich chleudere Dir hiermit dein Post churück:
Zitat:

Zitat von dahead
wie wärs wenn du was zum thema beiträgst oder es sein lässt?

Nun zum Code:
Delphi-Quellcode:
var
  s,zahl:string;
  i:Integer;

begin
s:='TEST 38';
  for i:=length(s) downto i do // <--- for i... downto i?  niemals. wenn, dann ...downto 1
  begin
    if s[i]=' ' then
      break;
   zahl:=copy(s,i,MaxInt);
   Label1.Caption:=zahl;
  end;
end;
Das klappt nicht. Gemeint ist vielleicht
Delphi-Quellcode:
begin
  s:='TEST 38';
  for i:=length(s) downto i do
    if s[i]=' ' then
      break;
  zahl:=copy(s,i,MaxInt); // Break würde hierhin springen
  Label1.Caption:=zahl;
end;
Aber das ist auch falsch, weil eine Schleifenvariable nach Beendigung der Schleife undefiniert ist.
Ganz bestimmt klappen tut das hier:
Delphi-Quellcode:
...
  s:= 'TEST 38';
  p := Pos (' ',s);
  if p=0 then
    Raise Exception.Create('Kein Leerzeichen');
  Label1.Caption := Copy (s, p+1, MaxInt);
...
Das Rumfrotzeln hier im Forum geht mir langsam, aber sicher auf den Keks, zumal 99% der Rumwixxereien Eigentore sind und deswegen peinlich für die Austeilenden (Bin ja auch nicht besser, gelobe aber Besserung).

dahead 13. Feb 2006 14:24

Re: String
 
ok, meine frage war wohl etwas zu schroff formuliert. das einzige was ich damit sagen wollte war, dass der thread-ersteller mit den spärlichen infos über den debugger sicherlich reichlich wenig anfangen kann. als question_mark dann allerdings seinen beitrag nach meinem kommentar dementsprechend erweitert hat, war meine frage natürlich nicht mehr gerechtfertigt.

ich entschuldige mich daher für meinen obigen kommentar bei question_mark.

(@alzaimar: das mit dem debugger bezog sich nicht auf "reden/sprechen", sondern auf "dein". dennoch danke für deinen kommentar!).

Question_mark 13. Feb 2006 23:01

Re: String
 
Hallo dahead,
ich sah mich doch gezwungen, meinen Beitrag etwas zu ergänzen. Mir ist halt
schnell klargeworden, dass nicht jeder in der Lage ist, dem Inhalt des Beitrags
intellektuell zu folgen. Was sich ja dann auch bestätigt hat.

Gruß
Question_mark

dahead 14. Feb 2006 00:05

Re: String
 
Zitat:

Zitat von Question_mark
intellektuell zu folgen. Was sich ja dann auch bestätigt hat.

sehr clever für einen 12 jährigen. respekt!

Pseudemys Nelsoni 14. Feb 2006 03:10

Re: String
 
Hier im Forum suchenGetTok


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