AGB  ·  Datenschutz  ·  Impressum  







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

POS findet was das ich nicht verstehe... ?

Ein Thema von user0815 · begonnen am 27. Mär 2014 · letzter Beitrag vom 28. Mär 2014
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#1

POS findet was das ich nicht verstehe... ?

  Alt 27. Mär 2014, 11:04
Delphi-Version: XE2
Warum ?

Delphi-Quellcode:
  private
    { Private-Deklarationen }
    Nachrichtentext : String;

    procedure GetParameter(var Value : String; Suche : String);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.GetParameter(var Value : String; Suche : String);
var
  i, j : Integer;
  s : String;
begin
  s := '';

  j := POS(Suche, Nachrichtentext) + length(Suche);

  for i := j to length(Nachrichtentext) do
    if Nachrichtentext[i] <> ';'
     then s := s + Nachrichtentext[i]
      else break;

  Value := s;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 s1, s2, s3 : String;
begin
  Nachrichtentext := 'S;XY41380993;P=10000,1;M1=012324016940;M2=;F-18;';

  GetParameter(s1,';M1=');
  GetParameter(s2,';M2=');
  GetParameter(s3,';W=');

  Memo1.Lines.Append(s1);
  Memo1.Lines.Append(s2);
  Memo1.Lines.Append(s3);
end;
Als Ausgabe im Memo1 erhalte ich:
Code:
012324016940

XY41380993
XY41380993 dürfte nicht ausgegeben werden ?

Grüße
0815
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: POS findet was das ich nicht verstehe... ?

  Alt 27. Mär 2014, 11:12
Hallo,

du setzt j auf einen Wert, unabhänging davon ob mit pos der SubString gefunden wurde.

-1 +3 = 2 -> XY41380993

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#3

AW: POS findet was das ich nicht verstehe... ?

  Alt 27. Mär 2014, 11:16
Ahhhh, manchmal hat man echt ein Brett vor´m Kopf.
Danke !
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: POS findet was das ich nicht verstehe... ?

  Alt 27. Mär 2014, 11:52
Weshalb so umständlich?
Delphi-Quellcode:
function GetValue(Suche : String) : String;
Var
  p : Integer;
  S : String;

begin
  Result := '';
  S := Nachrichtentext;

  p := Pos(Suche, S); // nach dem Suchstring suchen
  if p = 0 then exit; // wenn nichts gefunden, dann raus

  // wenn gefunden, dann ...
  Delete(S, 1 ,p + Length(S)-1); // ab gefundener Position die Länge des Suchstrings löschen

  p := Pos(';', S); // nach Delimiter suchen
  if p = 0 then exit; // wenn nichts gefunden, dann raus

  // wenn gefunden, dann Result zuweisen
  Result := Copy(S, 1, p-1);
end;
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: POS findet was das ich nicht verstehe... ?

  Alt 27. Mär 2014, 12:08
Wie wäre sowas:
Delphi-Quellcode:
procedure GetParameter2(Nachrichtentext: String; var Value : String; Suche : String);
begin
  with TStringList.Create do
  try
    Delimiter := ';';
    DelimitedText := Nachrichtentext;
    Value := Values[Suche];
  finally
    Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 s1, s2, s3 : String;
 Nachrichtentext: String;
begin
  Nachrichtentext := 'S;XY41380993;P=10000,1;M1=012324016940;M2=;F-18;';

  GetParameter2(Nachrichtentext, s1, 'M1');
  GetParameter2(Nachrichtentext, s2, 'M2');
  GetParameter2(Nachrichtentext, s3, 'W');

  Memo1.Lines.Append(s1);
  Memo1.Lines.Append(s2);
  Memo1.Lines.Append(s3);
end;
Etwas OOP lastig, aber es funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#6

AW: POS findet was das ich nicht verstehe... ?

  Alt 27. Mär 2014, 12:26
obiges war nur verkürzter Beispielcode.

Zitat:
Delphi-Quellcode:
  p := Pos(Suche, S); // nach dem Suchstring suchen
  if p = 0 then exit; // wenn nichts gefunden, dann raus
das habe ich jetzt ähnlich drinnen. Die echte Procedure sucht auch Rückwärts, usw...
Nochmal Danke, das Thema hat sich erledigt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#7

AW: POS findet was das ich nicht verstehe... ?

  Alt 27. Mär 2014, 12:57
Weshalb so umständlich?
Wobei ein Delete auch nicht immer so gut ist, bei all den entstehenden und "unnötigen" Speicheroperationen.
Via PosEx lässt sich das auch Ohne problemlos lösen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: POS findet was das ich nicht verstehe... ?

  Alt 27. Mär 2014, 13:09
Jep. PosEx habe ich auch all zu lange ignoriert (vielleicht weil man einzig wegen der Funktion die sonst kaum genutzte Unit StrUtils einbinden muss). Auf jeden Fall kann man damit einen ganzen String ohne Delete zerlegen. Auf der anderen Seite stellt sich die Frage was optimaler ist, eine extra Unit oder mit Delete arbeiten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#9

AW: POS findet was das ich nicht verstehe... ?

  Alt 27. Mär 2014, 13:18
Die StrUtils ist bei mir eh oftmals mit drin, da die noch andere nette Funktionen drin hat.
StartsText, ContainsText, EndsText, MatchText, IndexText (auch gut für ein CASE mit Strings) uvvm.

In Math liegen zwar ein paar IfThen, aber die String-Version versteckt sich in der StrUtils.


PS: Die StrUtils selber vergrößert die EXE selber praktisch garnicht.
- ungenutzte Funktionen werden nicht in die Anwendung gelinkt
- es gibt keinen "initialization"-Abschnitt oder globale Variablen
- bis auf die SysUtils werden keine bösen Units eingebunden
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Mär 2014 um 13:21 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: POS findet was das ich nicht verstehe... ?

  Alt 27. Mär 2014, 14:13
Hm, vielleicht sollte ich mir die Unit mal genauer angucken. Was ich bisher gesehen habe erinnert mich leicht an meinen alten TI-99/4A. Der hatte auch viele tolle String-Funktionen, die ich später beim C64 vermisst habe und nun hier wieder entdecke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:25 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