Problem mit Liste und Schleife VB.NET
-
Hallo!
Ich erstelle gerade ein Programm, und hab ein Problem mit einer Schleife, wo ich selbst nicht auf die Lösung komme, und mir das Programm auch keinen Fehler anzeigt.
Also ich lese eine Datei ein, welche gesplittet wird, und dann jede Zeile als Item einer Liste hinzugefügt wird.
Die einzulesende Datei sieht so aus (ist eine Plotterdatei mit der Endung *.plt)IN; SP1; PU940,5104; PD856,5104,772,5100,688,5092,608,5084,524,5072,444,5056,360,5040,280,5020,200,5000,124,4976,44,4952,-32,4924,-108,4892,-184,4860,-260,4824,-336,4788,-408,4748,-480,4708,-552,4664,-620,4620,-692,4572,-760,4520,-828,4468,-892,4416,-956,4360,-1020,4304,-1084,4244,-1144,4184,-1204,4124,-1264,4060,-1320,3992,-1380,3924,-1432,3856,-1488,3788,-1540,3716,-1592,3640,-1640,3564,-1688,3488,-1736,3412,-1780,3332,-1824,3252,-1864,3168,-1904,3084,-1944,3000,-1980,2916,-2016,2828,-2052,2740,-2084,2648,-2112,2560,-2144,2468,-2168,2376,-2192,2280,-2216,2188,-2240,2092,-2256,1996,-2276,1896,-2292,1800,-2304,1700,-2316,1600,-2324,1500,-2332,1396,-2336,1296,-2340,1192,-2340,1088,-2340,988,-2336,884,-2332,780,-2324,680,-2316,580,-2304,480,-2292,380,-2276,284,-2256,184,-2240,88,-2216,-8,-2192,-100,-2168,-196,-2144,-288,-2112,-380,-2084,-472,-2052,-560,-2016,-648,-1980,-736,-1944,-820,-1904,-904,-1864,-988,-1824,-1072,-1780,-1152,-1736,-1232,-1688,-1308,-1640,-1388,-1592,-1460,-1540,-1536,-1488,-1608,-1432,-1676,-1380,-1748,-1320,-1816,-1264,-1880,-1204,-1944,-1144,-2008,-1084,-2068,-1020,-2124,-956,-2184,-892,-2236,-828,-2292,-760,-2344,-692,-2392,-620,-2440,-552,-2484,-480,-2528,-408,-2568,-336,-2608,-260,-2644,-184,-2680,-108,-2712,-32,-2744,44,-2772,124,-2796,200,-2820,280,-2844,360,-2860,444,-2880,524,-2892,608,-2904,688,-2912,772,-2920,856,-2924,940,-2924,1028,-2924,1112,-2920,1192,-2912,1276,-2904,1360,-2892,1440,-2880,1520,-2860,1600,-2844,1680,-2820,1760,-2796,1840,-2772,1916,-2744,1992,-2712,2068,-2680,2144,-2644,2216,-2608,2292,-2568,2364,-2528,2436,-2484,2504,-2440,2572,-2392,2640,-2344,2708,-2292,2776,-2236,2840,-2184,2904,-2124,2968,-2068,3028,-2008,3088,-1944,3148,-1880,3204,-1816,3260,-1748,3316,-1676,3372,-1608,3424,-1536,3472,-1460,3524,-1388,3572,-1308,3616,-1232,3664,-1152,3748,-988,3828,-820,3864,-736,3900,-648,3936,-560,3968,-472,3996,-380,4024,-288,4052,-196,4076,-100,4100,-8,4120,88,4140,184,4156,284,4172,380,4188,480,4200,580,4208,680,4216,780,4220,884,4224,988,4224,1088,4224,1192,4220,1296,4216,1396,4208,1500,4200,1600,4188,1700,4172,1800,4156,1896,4140,1996,4120,2092,4100,2188,4076,2280,4052,2376,4024,2468,3996,2560,3968,2648,3900,2828,3828,3000,3748,3168,3664,3332,3616,3412,3572,3488,3524,3564,3472,3640,3424,3716,3372,3788,3316,3856,3260,3924,3204,3992,3148,4060,3088,4124,3028,4184,2968,4244,2904,4304,2840,4360,2776,4416,2708,4468,2640,4520,2572,4572,2504,4620,2436,4664,2364,4708,2292,4748,2216,4788,2144,4824,2068,4860,1992,4892,1916,4924,1840,4952,1760,4976,1680,5000,1600,5020,1520,5040,1440,5056,1360,5072,1276,5084,1192,5092,1112,5100,1028,5104,940,5104; PU; SP1;
Die Schleife sieht folgendermaßen aus:
For Each Line In dataset If Not String.IsNullOrEmpty(Line) Then 'Leere Zeilen (z.B. am Ende) ignorieren. Dim LastChar = Line(Line.Length - 1) If Not LastChar = ";"c Then 'Jede Zeile endet mit einem Semikolon. Ist das nicht der Fall, ist wahrscheinlich die Datei beschädigt. End If Dim Action = Line.Substring(0, 2) Dim HasArgument = (Line.Length - 2 - 1 <> 0) 'Gesamte Länge minus 2 Zeichen am Anfang minus Semikolon am Ende. Dim Argument = If(HasArgument, Line.Substring(2, Line.Length - 1 - 1), Nothing) Select Case Action Case "PU" 'Stift oben '... If HasArgument Then Dim Parts = Argument.Split(","c) If Parts.Length Mod 2 <> 0 Then 'Wenn immer Paare von X- und Y-Werten vorkommen sollen, muss die Anzahl gerade sein. End If For Each i In Parts Dim CoordinatePart As Integer If Not Integer.TryParse(i, CoordinatePart) Then 'Datei beschädigt End If FastColoredTextBox1.InsertText(CoordinatePart & ",", An) Next End If Case "PD" 'Stift unten '... If HasArgument Then Dim Parts = Argument.Split(","c) If Parts.Length Mod 2 <> 0 Then 'Wenn immer Paare von X- und Y-Werten vorkommen sollen, muss die Anzahl gerade sein. End If For Each i In Parts Dim CoordinatePart As Integer If Not Integer.TryParse(i, CoordinatePart) Then 'Datei beschädigt End If '... Next End If End Select End If Next
Das Problem dabei ist nun, das die Variable "Action" immer nur beim ersten Schleifendurchlauf beschrieben wird, und ab dem zweiten leer bleibt, somit kommt man nie in das Select Case.
Dann hätte ich noch eine Frage, welche auch damit zu tun hat.
Wenn ich in der Datei die ersten beiden Zeilen weg mache, funktioniert es auch (wenn auch nur ein mal), und das Programm springt in das Case "PU". Dort wird dann auch die Zeile gelesen, und beide Zahlen nacheinander gelesen.
Wie bekomme ich nun die beiden Zahlen in zwei unterschiedliche Variablen? Also die erste ausgelesene Zahl soll in temp1 und die zweite in temp2.Würde mich über Hilfe sehr freuen.
-
Hast du verifiziert, dass die Liste korrekt im Dataset landet? Wie liest du sie dort ein? Wegen deiner zweiten Frage kannst du String.Split benutzen. Also im Sinn von:
Dim temp = "940,5104".Split(","c) ' temp[0] iat dann "940", temp[1] "5104"
-
Hab es nun hinbekommen mit dem richtigen einlesen, war das falsche Split-Argument.
Jetzt hänge ich beim letzten Teil, und drehe mich die ganze Zeit nur im Kreis.
Also ich hab nun die Zeile, welche z.B. so aussieht: 856,5104,772,5100,688,5092,608,5084,524,5072,444,5056
Diese wird nun immer paarweise eingelesen, und zwei verschiedenen Variablen zugewiesen. Also in dem Fall hat dann temp1 den Wert 856, und temp2 den Wert 5104. Dies funktioniert auch, allerdings ist die Schleife ja noch nicht fertig, und das nächste Paar wird eingelesen (geht auch, sehe es im Debugger). Allerdings bekommen nun temp1 und temp2 nicht mehr die neuen Werte.
Wie sähe denn der Code richtig aus?For Each i In Parts Dim CoordinatePart As Integer If Not Integer.TryParse(i, CoordinatePart) Then 'Datei beschädigt End If '... tempX =Parts(0) tempY =Parts(1) Next
Oder wie kann man das sonst machen?
-
Hab es hinbekommen, hat sich also erledigt.