2017-09-23 5 views
0

Ich möchte viele Dezimalzahlen als Strings in Float auf einmal zu konvertieren konvertieren. Ich versuche folgenden Code, der diese Strings zu einer Serie kombiniert und sie dann in Floats umwandelt. Das funktioniert alles in Ordnung, aber schlägt fehl, wenn ein Fehler auftritt:Konvertieren Sie String-Elemente in Reihe zu Floats in Red Sprache

a: "1.5" 
b: "" 
c: "3.7" 
invars: [a b c] 

print a 
print type? a 

set invars foreach x invars [append [] to-float reduce x] ; code to convert string series to float series; 

print a 
print type? a 

Der Fehler ist:

*** Script Error: cannot MAKE/TO float! from: "" 
*** Where: to 
*** Stack: to-float 

Zur Fehlerkorrektur habe ich versucht, folgenden Code:

temp: [] 
foreach x invars [ 
    y: copy "" 
    either error? [set [y] to-float reduce x] 
     [append temp reduce x]   ; put original value if not convertable 
     [append temp reduce y] ] 
print temp 
set invars temp 
print a 
print type? a 

Aber das ist auch funktioniert nicht. Wo ist das Problem und wie kann das korrigiert werden?

Antwort

2
forall invars [invars/1: load get invars/1] 
>> invars 
== [1.5 [] 3.7] 

und wenn Sie wollen

>> replace/all invars block! 0 
== [1.5 0 3.7] 

der leeren Blöcke loszuwerden und wenn Sie wirklich alles in tun möchten (: weniger :) Schritte

forall invars [invars/1: either empty? invars/1: get invars/1 [0.0] [load invars/1]] 

Nach können Sie Setze deine Variablen erneut.

Aber wenn Sie nur Ihre Variablen einstellen möchten, haben Sie

foreach x invars [set :x load get x] 

mit to-float

foreach x invars [either empty? get x [set :x 0] [set :x to-float get x]] 

und schließlich eine alle Fehler sichere Ausführung mit to-Float

foreach x invars [attempt [set :x to-float get x]] 
== 3.7 
>> a 
== 1.5 
>> b 
== "" 
>> c 
== 3.7 
zu tun
+0

Wo setze ich 'to-float' auf? – rnso

+0

Wenn Sie eine Lösung mit ** entweder leer? ** verwenden, könnten Sie ** load ** durch ** to float ** ersetzen – sqlab

+0

Welche funktioniert nicht? Alle Versionen funktionieren wie beschrieben. Verwenden Sie eine neue neue Konsole – sqlab

Verwandte Themen