2016-03-23 48 views
2

VBS'de sözlüklerin bir sözlük oluşturmaya çalışıyorum ve çalışabilirim; bununla birlikte, alt düzey sözlüğümün değere değil, referans olarak erişildiği görülmektedir. Sözlükler sözlük nasıl oluşturulur vbscript

denedim bu:
Dim s, fso, f, ts, str, fRead, line, i, dictElements, dictionary, screenItem 
Set s = CreateObject("System.Text.StringBuilder") 
Set fso = CreateObject("Scripting.FileSystemObject") 
Set dictElements = CreateObject("Scripting.Dictionary") 
Set dictionary = CreateObject("Scripting.Dictionary") 

'add elements to dictionary 
dictElements.Add "Name", "MyName" 
dictElements.Add "Setpoint", 100.0 
dictElements.Add "Process Value", 80.6 

'Create Data Structure 
dictionary.Add "DigitalInputOne", dictElements 
dictionary.Add "DigitalInputTwo", dictElements 

'test dictionary 
dictionary("DigitalInputTwo")("Name")= "Hello" 
dictionary("DigitalInputTwo")("Setpoint")= 40.123 
HmiRuntime.Screens("Home").ScreenItems("Text field_1").Text = dictionary ("DigitalInputOne")("Name") 
HmiRuntime.Screens("Home").ScreenItems("Text field_2").Text = dictionary("DigitalInputOne")("Setpoint") 
HmiRuntime.Screens("Home").ScreenItems("Text field_3").Text = dictionary("DigitalInputOne")("Process Value") 

HmiRuntime.Screens("Home").ScreenItems("Text field_4").Text = dictionary("DigitalInputTwo")("Name") 
HmiRuntime.Screens("Home").ScreenItems("Text field_5").Text = dictionary("DigitalInputTwo")("Setpoint") 
HmiRuntime.Screens("Home").ScreenItems("Text field_6").Text = dictionary("DigitalInputTwo")("Process Value") 

Ben benim elemanları sözlüğü referans gereğidir düşündürüyor değerler, tüm değişiklikleri değerlerinden biri değiştirmek

. Bunun gerçekleşmesi için bir yol var mı? Her alt sözlüğün farklı olmasını istiyorum. ve bu bir subdictionary işaret edecek iki anahtar ayarlarken - Sadece bir subdictionary oluştururken böylece

cevap

2

Sadece bir kez

Set dictElements = CreateObject("Scripting.Dictionary") 

var. Bunun yerine, aşağıdakileri yapın: Aşağıdaki örnekte, sayım tabanlı bir çöp toplama aracı vardır: VBScript, referans sayım tabanlı bir çöp topluluğuna sahiptir. İlk sözlüğü en üst düzey sözlüğe eklediğinizde, üst düzey sözlüğe artık bir başvuruda bulunur. Bu nedenle, dictElements değerini ikinci bir sözlüğe eşitlediğinizde, orijinal sözlük en üst düzey sözlük tarafından canlı tutulur, dolayısıyla çöp toplanmaz. Bu bir şablon oluşturmama izin verecek mi, yoksa bunu yapmanın daha iyi bir yolu var mı?

+0

Benim alt sözlüklerimin çoğu sadece farklı değerler ile aynı olacak. – FighterHayabusa

+0

Bir sözlük yazıldığında, bunu belirli bir şekilde başlatan bir alt yazı yazabilirim. Ardından 3 adımlı işlemi takip edin: 1) sözlüğü yaratın, 2) Başlatma işlemini altta çalıştırın, 3) bunu en üst düzey sözlüke atayın. –

+1

Temelde bir veri türü gibi dictElements kullanmak istedim. Bunu yaptım ve sözlüğe yılında her öğe için 'Set sözlüğü ("DigitalInputOne") = CreateObject ("Scripting.Dictionary") Seti sözlüğü ("DigitalInputTwo") = CreateObject ("Scripting.Dictionary") işleri Her öğe için dictElements dictionary (item) .Add element, dictElements (element) Sonraki Sonraki 'ama bence çok iyi değil. Sınıfları kullanamıyorum çünkü bunu WinCC'de yapıyorum. – FighterHayabusa