2017-04-13 1 views
0

Ich möchte Werte aus der Textdatei abrufen und Variablen in der Schleife zuweisen, um dies zu erreichen. data.text Datei enthält zwei SpaltenWie Werte aus der Datei abgerufen und der Variablen zugewiesen werden und in der Schleife ausgeführt werden

 
Name, Age 
ABC , 31 
def , 41 
ghi  , 51 

ich Namen von diesem wählen möchten, und ordnen zu $age nächsten Wert Alter und weisen Sie nehmen dann an $name . Ich werde diese durch Sequenz bis zum Ende der Datei holen.

Ich versuchte foreach & Zeile aber in der Lage komplette Linie zu holen vielleicht ist dies möglich durch regex oder Liste verwenden, aber nicht sicher, wie es zu benutzen

bitte

Antwort

1

mit Beispielprogramm helfen, das wie eine CSV sieht Datei. Sie möchten dafür eine proper CSV parser verwenden.

lassign [lmap value [csv::split $line] {string trim $value}] name age 

Aber das ist eine reine Verfeinerung:

package require csv 

set f [open "data.text"] 

# Skip the header line; we could parse it, but we won't 
gets $f 

# Parse the remaining lines 
while {[gets $f line] >= 0} { 
    lassign [csv::split $line] name age 
    # Your data has extra spaces in it, it seems; we deal with that here 
    set name [string trim $name] 
    set age [string trim $age] 
    # Now we'll do something with that 
    puts "name is '$name', age is '$age'" 
} 
close $f 

Mit Tcl 8.6, können Sie die Trimm mehr direkt integrieren. (8.5 und früher keine lmap hat, man könnte schreibt es mit foreach und so weiter, aber es gibt keinen wirklichen Punkt;. Sie den Code ohne es direkt genug schreiben können, wenn es gibt nur zwei Felder)

+0

Vielen Dank für Ihre Hilfe. Aber leider hat meine Software kein CSV-Paket gebündelt. aufgrund dessen kann ich oben genannten Code nicht verwenden. Gibt es einen anderen Weg, dies zu lösen? Ich habe den folgenden Code verwendet, konnte jedoch Name und Alter nicht einzeln angeben. Mein Code liest die ganze Zeile ein und platziert sie in Name & Age Textfeld Name [open data.txt r] set file_data [lies $ Name] foreach line $ file_data { gesetzt -widget m_Name -value $ line #Erinnerungsname in Textfeld set -widget m_Age-Wert $ line } – Raj

+0

Hallo Herr, ich fand die Antwort für meine Frage. Siehe unten. Aber immer noch geht es Ihnen gut. Danke für Ihre Hilfe. set file_open [open data.txt r] foreach line [teilen [string trim [lesen $ chan]] \ n] { lassign $ zeile Name Name puts "a = $ Name b = $ Name" } schließen $ Datei öffnen – Raj

Verwandte Themen