![]() |
AW: String in einer Stringliste an Trennzeichen zerlegen
Kann ich als Trennzeichen auch #13#10 verwenden ?
Bspw.:
Code:
Ich möchte die Events auch trennen. In dem Buffer können beliebig viele Events kommen, mal 1 oder mal 4. D.h. ich müsste es irgendwie mit einer eof schleife durchgehen oder?
Event: DialBegin
Privilege: call,all Channel: PJSIP/1177-00000638 ChannelState: 4 ChannelStateDesc: Ring CallerIDNum: 1177 CallerIDName: IT Test ConnectedLineNum: ConnectedLineName: Language: de AccountCode: Context: macro-dial Exten: s Priority: 65 Callid: 1022539411-5060-31@BA.BHC.CF.BCA Linkedid: 1557992134.3754 PageFlag: false Application: Dial Reg_calleenum: Reg_callernum: Reg_callername: Uniqueid: 1557992134.3754 DestChannel: PJSIP/1126-00000639 DestChannelState: 0 DestChannelStateDesc: Down DestCallerIDNum: 1126 DestCallerIDName: Martin DestConnectedLineNum: 1177 DestConnectedLineName: IT Test DestLanguage: de DestAccountCode: DestContext: callee-handler DestExten: s DestPriority: 12 DestCallid: b8fad6fc-4053-4b2d-ad90-13773452ebe2 DestLinkedid: 1557992134.3754 DestPageFlag: false DestApplication: Set DestReg_calleenum: DestReg_callernum: DestReg_callername: DestUniqueid: 1557992135.3755 DialString: 1126/sip:1126@10.172.25.125:5060 Event: NewConnectedLine Privilege: call,all Channel: PJSIP/1177-00000638 ChannelState: 4 ChannelStateDesc: Ring CallerIDNum: 1177 CallerIDName: IT Test ConnectedLineNum: 1126 ConnectedLineName: Martin Language: de AccountCode: Context: macro-dial Exten: s Priority: 65 Callid: 1022539411-5060-31@BA.BHC.CF.BCA Linkedid: 1557992134.3754 PageFlag: false Application: Dial Reg_calleenum: Reg_callernum: Reg_callername: Uniqueid: 1557992134.3754 Bei Trim(Eventlst.Values['Event']); nimmt dieser nur das 1. Event auf, nicht das 2. oder evtl 3. oder 4. Gibt es eine Möglichkeit an die auch zu kommen? |
AW: String in einer Stringliste an Trennzeichen zerlegen
.. für die StringList ist #13#10 die Markierung um eine neue Zeile anzulegen.
Als Delimiter kann man meines Wissens nur ein Zeichen verwenden. trim kannst Du dann auf die einzelen Zeilen der StringList anwenden. Grüße Klaus |
AW: String in einer Stringliste an Trennzeichen zerlegen
Zitat:
Delphi-Quellcode:
procedure HandleData(Source: TStrings);
var CallerID: string; EventName: string; begin if Source.Count = 0 then Exit; EventName := Trim(Source.Values['Event']); CallerID := Trim(Source.Values['CallerIDNum']); end; procedure HandleFile(const AFileName: string); var line: string; lst: TStringList; reader: TStreamReader; begin reader := TStreamReader.Create(AFileName); try lst := TStringList.Create; try lst.NameValueSeparator := ':'; while not reader.EndOfStream do begin line := reader.ReadLine; if Trim(line) = '' then begin HandleData(lst); lst.Clear; end else begin lst.Add(line); end; end; { falls als letztes keine Leerzeile mehr kam } HandleData(lst); finally lst.Free; end; finally reader.Free; end; end; |
AW: String in einer Stringliste an Trennzeichen zerlegen
Wozu #13#10 als Trennzeichen verwenden? Dann kannst du doch einfach jede Zeile direkt durchgehen und ausgeben lassen.
Ein Beispiel wie ich es aktuell nutze, mal für dich etwas angepasst. Hab es aber nicht testen können.
Delphi-Quellcode:
procedure Bla.ReadCSVClick(Sender: TObject);
var StringList : TStringList; row : Integer; Eventcounter : integer; begin Eventcounter := 0; StringList := TStringList.Create; try StringList.LoadFromFile('Stringlistfile.xxx'); for row := 0 to StringList.Count - 1 do begin if split(StringList.Strings[row], ':', 1) = 'Event' then //Wenn ein neues Event kommt; begin inc(Eventcounter); //definieren des Events end; //Mache was für das Event "Eventcounter" (Name des Events wäre split(StringList.Strings[row], ':', 2) end; finally StringList.Free; end; end; //String zerteilen function Split(text: string; delimiter: char; p: integer): string; var stl: TStrings; begin stl := TStringList.Create; try stl.delimiter := delimiter; stl.DelimitedText := text; finally result := stl.Strings[p]; stl.free; end; end; |
AW: String in einer Stringliste an Trennzeichen zerlegen
Zitat:
|
AW: String
Zitat:
Delphi-Quellcode:
kann man folgendes schreiben:
if Pos(ZeilenString, 'CallerIDNum: ')=1 then
Delphi-Quellcode:
if ZeilenString.StartsWith('CallerIDNum: ') then
Nur mal so zur Erinnerung - auch an mich selbst! :-D |
AW: String
Zitat:
|
AW: String
Zitat:
|
AW: String in einer Stringliste an Trennzeichen zerlegen
Ich hab mich für einen etwas anderen Weg entschieden. Ohne die Anregungen wäre ich trotzdem nicht darauf gekommen, danke nochmals. :)
Code:
//Events auslesen (pro Buffer können 1-24 Events eingehen)
EventCounter := 0; for row := 0 to (lst.Count -1) do begin if ((lst.Strings[row]).StartsWith('Event')) then begin if(Eventlst.Count = 0) then // Nur beim 1. Event true begin Eventlst.Add(lst.Strings[row]); EventCounter := 1; end else begin handleEvent(Eventlst.Text); // Event handeln Eventlst.Clear; Eventlst.Add(lst.Strings[row]); EventCounter := EventCounter+1; end; end else begin Eventlst.Add(lst.Strings[row]); end; end; // Falls nur 1 Event im Buffer if (EventCounter = 1) then begin handleEvent(Eventlst.Text); // Event handeln Eventlst.Clear; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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