Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   String in einer Stringliste an Trennzeichen zerlegen (https://www.delphipraxis.net/200636-string-einer-stringliste-trennzeichen-zerlegen.html)

Trafel21 10. Mai 2019 08:09


String in einer Stringliste an Trennzeichen zerlegen
 
Hallo zusammen,

Ich möchte aus meiner Telefonanlage einkommende Nummern auslesen, via Asterisk.
Ich hab ein Problem und zwar hab ich einen sehr großen String mit Zeilenumbrüchen und möchte versuchen die Nummer zu extrahieren.

Der String:

Zitat:

Event: Newchannel
Privilege: call,all
Channel: PJSIP/trunk_1-0000012f
ChannelState: 0
ChannelStateDesc: Down
CallerIDNum: 55555555
CallerIDName:
ConnectedLineNum:
ConnectedLineName:
Language: en
AccountCode:
Context: default
Exten: s
Priority: 1
Callid:
Linkedid: 1557211767.720
PageFlag: false
Application:
Reg_calleenum:
Reg_callernum:
Reg_callername:
Uniqueid: 1557211767.720

Wie würdet ihr versuchen an die Nummer zu kommen?

hoika 10. Mai 2019 08:16

AW: String
 
Hallo,
TStringList
LoadFromFile

und dann die StringList durchlaufen und mit Pos(ZeilenString, 'CallerIDNum: ')=1 die richtige Zeile finden.
Und zum Schluss mit Copy oder StringReplace die Nummer extrahieren.

Trafel21 10. Mai 2019 08:43

AW: String
 
Zitat:

Zitat von hoika (Beitrag 1431891)
Hallo,
TStringList
LoadFromFile

und dann die StringList durchlaufen und mit Pos(ZeilenString, 'CallerIDNum: ')=1 die richtige Zeile finden.
Und zum Schluss mit Copy oder StringReplace die Nummer extrahieren.

Danke für die Antwort.

Die String Variable ist bereits in Delphi gespeichert und mit Pos hab ich bereits die CallerIDNum ermittelt. Bzw eine Funktion geschrieben um auch andere Zeilen zu ermittelt:

Zitat:

function Tbc_Asterisk_CallControl.SelectCommand(ContainStri ng: string; Buffer: string): boolean;
begin
If (Pos(ContainString, Buffer) <> 0)
then result := True
else Result := false;
end;
Das Problem ist nur irgendwie fehlt mir der Gedanke, wie ich mit StringReplace nur an die Nummer komme, die Nummer kann unterschiedlich lang sein. Kann ich irgendwie bis zum Zeilenumbruch (ASCI #13) eine Abfrage schreiben?

mkinzler 10. Mai 2019 08:52

AW: String
 
Delphi-Quellcode:
var
  sl: TStrings;
..
  try
    sl := TStringList.Create;
    sl.Text := Buffer;
    result := sl[sl.IndexOf( ContainString)];
  finally
    sl.Free;
  end;

Uwe Raabe 10. Mai 2019 08:56

AW: String
 
Wir wäre es denn hiermit:
Delphi-Quellcode:
function ExtractCallerID(const AFileName: string): string;
var
  lst: TStringList;
begin
  lst := TStringList.Create;
  try
    lst.LoadFromFile(AFileName);
    lst.NameValueSeparator := ':';
    Result := Trim(lst.Values['CallerIDNum']);
  finally
    lst.Free;
  end;
end;

haentschman 10. Mai 2019 08:58

AW: String
 
:thumb: elegant wie immer...

Trafel21 10. Mai 2019 09:03

AW: String
 
Ah Okay, ich hab den Kontext von TStringlist falsch aufgefasst.

@edit: Funktioniert, wieder was dazu gelernt. Nochmals vielen dank.

Luckie 10. Mai 2019 11:45

AW: String in einer Stringliste an Trennzeichen zerlegen
 
Ich habe den Titel mal etwas aussagekräftiger formuliert.

hhcm 10. Mai 2019 12:26

AW: String in einer Stringliste an Trennzeichen zerlegen
 
Nur der Vollständigkeit halber :)

Delphi-Quellcode:
function GetCallerId(str: string): string;
var
  Match: TMatch;
begin
  result := '';
  Match := TRegex.Create('CallerIDNum:(.*)').Match(str);
  if Match.Success then
    result := Trim(Match.Groups[1].Value);
end;

Neutral General 10. Mai 2019 12:57

AW: String in einer Stringliste an Trennzeichen zerlegen
 
Dann würde ich mir doch lieber das Trim sparen und per RegEx auch nur den Wert ohne Leerzeichen holen:

CallerIDNum: *(.*)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Seite 1 von 2  1 2      

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