AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign String in einer Stringliste an Trennzeichen zerlegen
Thema durchsuchen
Ansicht
Themen-Optionen

String in einer Stringliste an Trennzeichen zerlegen

Ein Thema von Trafel21 · begonnen am 10. Mai 2019 · letzter Beitrag vom 17. Mai 2019
Antwort Antwort
Seite 1 von 2  1 2      
Trafel21

Registriert seit: 16. Nov 2018
69 Beiträge
 
#1

String in einer Stringliste an Trennzeichen zerlegen

  Alt 10. Mai 2019, 09:09
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?

Geändert von Luckie (10. Mai 2019 um 12:44 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: String

  Alt 10. Mai 2019, 09:16
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.
Heiko
  Mit Zitat antworten Zitat
Trafel21

Registriert seit: 16. Nov 2018
69 Beiträge
 
#3

AW: String

  Alt 10. Mai 2019, 09:43
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.867 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: String

  Alt 10. Mai 2019, 09:52
Delphi-Quellcode:
var
  sl: TStrings;
..
  try
    sl := TStringList.Create;
    sl.Text := Buffer;
    result := sl[sl.IndexOf( ContainString)];
  finally
    sl.Free;
  end;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.599 Beiträge
 
Delphi 12 Athens
 
#5

AW: String

  Alt 10. Mai 2019, 09:56
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.428 Beiträge
 
Delphi 12 Athens
 
#6

AW: String

  Alt 10. Mai 2019, 09:58
elegant wie immer...
  Mit Zitat antworten Zitat
Trafel21

Registriert seit: 16. Nov 2018
69 Beiträge
 
#7

AW: String

  Alt 10. Mai 2019, 10:03
Ah Okay, ich hab den Kontext von TStringlist falsch aufgefasst.

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

Geändert von Trafel21 (10. Mai 2019 um 10:23 Uhr)
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
273 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: String

  Alt 16. Mai 2019, 12:47
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.
Ich weiß ja, dass pos ein echter Klassiker ist, aber mittlerweile kann man das dank der String-Helper deutlich eleganter machen. Denn statt

if Pos(ZeilenString, 'CallerIDNum: ')=1 then kann man folgendes schreiben:

if ZeilenString.StartsWith('CallerIDNum: ') then

Nur mal so zur Erinnerung - auch an mich selbst!
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#9

AW: String

  Alt 16. Mai 2019, 13:38
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.
Ich weiß ja, dass pos ein echter Klassiker ist, aber mittlerweile kann man das dank der String-Helper deutlich eleganter machen. Denn statt

if Pos(ZeilenString, 'CallerIDNum: ')=1 then kann man folgendes schreiben:

if ZeilenString.StartsWith('CallerIDNum: ') then Nur mal so zur Erinnerung - auch an mich selbst!
Das setzt voraus, das er einen speziellen Eintrag finden und den zugehörigen Wert ausgeben möchte. Soll aber immer die ganze Zeile betrachtet werden muss man den Klassiker wählen und die Zeilen durchgehen oder die Variante von Uwe Raabe wählen.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
273 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: String

  Alt 16. Mai 2019, 14:02
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.
Ich weiß ja, dass pos ein echter Klassiker ist, aber mittlerweile kann man das dank der String-Helper deutlich eleganter machen. Denn statt

if Pos(ZeilenString, 'CallerIDNum: ')=1 then kann man folgendes schreiben:

if ZeilenString.StartsWith('CallerIDNum: ') then Nur mal so zur Erinnerung - auch an mich selbst!
Das setzt voraus, das er einen speziellen Eintrag finden und den zugehörigen Wert ausgeben möchte. Soll aber immer die ganze Zeile betrachtet werden muss man den Klassiker wählen und die Zeilen durchgehen oder die Variante von Uwe Raabe wählen.
In dem von mir zitierten Beispiel wird am Zeilenanfang gesucht ("pos(...)=1"): Darauf bezieht sich mein Kommentar. Dass man, wenn man innerhalb der Zeile sucht, StartsWith nicht verwenden kann, dürfte klar sein...
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:47 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 by Thomas Breitkreuz