2016-06-22 4 views

Antwort

4
% set input "Timestamp,6/22/2016 2:25:00 AM 
mos,4.16 
jitter,19.22" 
Timestamp,6/22/2016 2:25:00 AM 
mos,4.16 
jitter,19.22 
% set lines [split $input \n] 
{Timestamp,6/22/2016 2:25:00 AM} mos,4.16 jitter,19.22 
% foreach line $lines { 
    lassign [split $line ,] varname value 
    set $varname $value 
    set result($varname) $value 
} 
% set Timestamp 
6/22/2016 2:25:00 AM 
% set mos 
4.16 
% set jitter 
19.22 
% parray result 
result(Timestamp) = 6/22/2016 2:25:00 AM 
result(jitter) = 19.22 
result(mos)  = 4.16 
+2

Ich würde eher 'regexp -inline verwenden 'für die Zeilentrennung pro Zeile, da diese resistenter gegen Probleme mit Kommas in Werten ist, aber ansonsten ist es der richtige Ansatz. Ich mag es auch, die Werte in ein Array zu setzen; es vermeidet später alle Arten von Überraschungen. –

+0

Danke Donal .... Die Lösung hat funktioniert! :) –

-3
 Timestamp,6/22/2016 2:25:00 AM 
    mos,4.16 
    jitter,19.22 
    You can spit with (,) and you find an array . 
    then you retrieve the value of Index wise . 
    As :- if variable name is var="6/22/2016 2:25:00 AM,4.16,19.22"; 
    then String[] val= var.split(","); 
    val[0] = 6/22/2016 2:25:00 AM ; 
    val[1] = 4.16; 
    val[2] = 19.22; 

if your technology is java . 
2

Zur Vollständigkeit zwei Varianten auf Dinesh Lösung:

foreach item [split $input \n] { 
    set value [lassign [regsub , $item { }] name] 
    set result($name) $value 
} 

Der wesentliche Unterschied hier ist, dass es nur (quasi-) teilt auf dem ersten Komma (die resultierende Zeichenfolge wird behandelt, als eine reguläre durch Leerzeichen getrennte Liste mit möglicherweise mehr als zwei Elementen, daher der alternative Aufruf von lassign).

foreach {- name value} [regexp -line -inline -all {^([^,]+),(.*)$} $input] { 
    set result($name) $value 
} 

Dieser zeigt die von Donal vorgeschlagene Regex-Teilung.

Dokumentation: {(. *)^([^] +) $} foreach, lassign, Syntax of Tcl regular expressions, regexp, regsub, set, split

Verwandte Themen