Ich bin ein Anfänger auf Expect, aber ich kann nicht über ein Problem, das ich mit einem Logging-Monitoring-Skript habe ich schreibe.Tab on Expect Zeichenfolge Verkettung
ich Stunden habe verbrachte googeln, warum ich diese Arbeit nicht bekommen kann:
puts $redirect [concat "${time}\t" "${context}\t" "$id\t" "${eventtype}" "${eventstatus}\t" "${eventcontext}" ]
Die \ t char (es nicht einmal mit anderen \ Zeichen funktioniert) zeigt sich nicht. Unabhängig davon, wie und wo ich es platzieren, ich habe versucht, verschiedene Sachen:
puts $redirect [concat "${time}" "\t" "${context}" [...] ]
puts $redirect [concat "${time}\t" "${context}" [...] ]
puts $redirect [concat "${time}" "\t${context}" [...] ]
puts $redirect [concat "${time}" \t "${context}" [...] ]
* wo Umleitung ist set redirect [open $logfile a]
* wo [...] sind andere Saiten ich verketten, in der gleichen Weg.
Von http://tcl.tk/man/tcl8.5/TclCmd/Tcl.htm#M10
[5] Argument Expansion. Wenn ein Wort mit der Zeichenfolge "{}" gefolgt von einem Nicht-Leerzeichen beginnt, wird der führende "{}" entfernt und der Rest des Worts wird geparst und wie jedes andere Wort ersetzt. Nach Substitution wird das Wort als Liste geparst (ohne Befehl oder Variablen Substitutionen; Backslash Substitutionen werden durchgeführt wie normal für eine Liste und einzelne interne Wörter können von entweder Klammern oder doppelte Anführungszeichen umgeben) und seine Wörter werden zu hinzugefügt, wobei der Befehl ersetzt wird. Zum Beispiel ist "cmd a {} {b [c]} d {} {$ e f" g h "} äquivalent zu" cmd a b {[c]} d {$ e} f "g h" ".
[6] Hosenträger. Wenn das erste Zeichen eines Worts eine offene geschweifte Klammer ("{") ist und Regel [5] nicht zutrifft, wird das Wort durch die passende Klammer geschlossen ( geschweifte Klammer ("}")). Klammern verschachteln innerhalb des Wortes: Für jede zusätzliche offene Klammer muss eine zusätzliche Klammer vorhanden sein (wenn jedoch eine offene Klammer oder geschweifte Klammer innerhalb des Wortes mit einem umgekehrten Schrägstrich und dann angegeben wird, wird dies beim Auffinden der passenden Klammer nicht berücksichtigt). Es werden keine Ersetzungen für die Zeichen zwischen den geschweiften Klammern durchgeführt, außer für die umgekehrten Schrägstrich-Newline-Ersetzungen, die unten beschrieben werden, und Semikolons, Zeilenumbrüche, enge Klammern oder Leerzeichen erhalten keine Sonderinterpretation. Das Wort besteht genau aus den Zeichen zwischen den äußeren Klammern, ohne die Klammern selbst.
Ironischerweise kann ich dies funktioniert:
puts $redirect [concat "${time}\n" "-\t${context}" [...] ]
Wenn ich vor dem TAB ein Zeichen setzen, es funktioniert, aber ich kann es nicht verwenden.
Ex-Ausgang: 2016-06-01 15:43:12 - macro
gewünschte Ausgabe: 2016-06-01 15:43:12 macro
Ich habe mit append
auf den Aufbau der Saite versucht, aber es ist wie es ist, Stücke von String aufgrund max Puffer char zu essen, ist es möglich?
Fehle ich etwas? Danke in Beratung.
verwenden Wie ist 'append' Versagen? Gibt es einen Grund, warum Sie hier 'concat' verwenden anstatt nur ein langes String-Literal mit allen darin enthaltenen Variablen' $ {time} \ t $ {context} \ t $ id \ t $ {eventtype} $ {eventstatus } \ t $ {eventcontext} '? Ein Beispiel –
Ausgabe von 'append' ist: 2016-06HANGUPNAVomain-1JUniqueId = JustSrvDomain-1464793190,747 & HangupCause = 16e = Hangup & SphereGroup = & NextSphereName = Hangup 2016.06.01 17: 00: 0058ledNum = 13666 2016.06.01 16.59 : 55 Es ist durcheinander, es setzt die Zeit am Ende, der Kontext ist nirgends, "Omain-1" ist ein Teil von $ ID und auf .., Ich habe die Zeichenfolge verwendet, die Sie mir auf diesem ein. – Ticcio
Das sieht fast so aus, als hätten Sie Carriage-Return-Zeichen ('\ r') in den Werten, so dass die Ausgabe (an das Terminal) sich selbst überschreibt (oder etwas ähnliches mit tcl). Sind Sie sicher, dass die Strings genau die Werte enthalten, die Sie erwarten? –