Guten Tag, Ich schreibe ein C# Tool welches gespeicherte Messdaten in txt-Format einließt und diese weiter verarbeitet und oder Graphisch darstellt. Eine Zeile enthält verschiedene Daten mit unterschiedlicher Digit-Länge ZB: 00001; 032145,0232; 23456; 05,014; 23,0312154; 2351458654; ... 00002; 033155,0232; 22356; 05,564; 23,0892154; 9074348654; ... Hier meine Logik: 1.) Ich hole mir eine vollständige Zeile, 2.) Packe die "Zeichen" in einem Char array bis ich ";" treffe = 1.Werte ... Ich wiederhole 2.) und bilde so einzelnen Werte bis diese Zeile zu end ist. 3.) Nun komvertiere ich die Werte (Char array) zu einen String 4.) Dann konvertiere ich den String zo double oder Long je nachdem welche Werte in der Zeile Hier mein Problem: Um die Zeichen im Char array zu schieben habe ich vorher eine char[]=new char[11] definiert. Ich habe also zum Begin ['0','0','0','0','0','0','0','0','0','0']. Wenn die Zeichen eingeschoben sind ZB die erste (00001) dann sehe ich ['0','0','0','0','1','0','0','0','0','0']. Wird diese im String konvertiert dann bekomme ich "0000100000" Wird diese zu long oder int konvertiert bekomme ich (100000) und ich erwarte eine (1) als wert. nun möchte ich die char array size erst in der Loop setzen sodass keine leere Stellen mit "0" mehr entstehen, da bekomme ich die Fehlermeldung: "Use of unassigned local variable 'chartVariable'" und zwar erst genau an der Stelle wo ich die char array zu string konvertieren möchte Wie kann ich die char array size on the fly bilden Hier einen Auszug: char[] onedoublechar; for (filelineidx = 0; filelineidx < filelinesize-1; filelineidx++) { // Get one line and remove any whitespace out of string lines[filelineidx] = Regex.Replace(lines[filelineidx], @"\s", ""); // convert and distribute the new line into char array onelinechar = lines[filelineidx].ToCharArray(); for (lineidx = 0; lineidx < 9; lineidx++) { onedoublecharidx = 0; while (onelinechar[onelinecharidx] != ';') { onedoublechar = new char[a+1]; // build a single value char array onedoublechar[onedoublecharidx] = onelinechar[onelinecharidx]; // Index showing the character in the line character read onelinecharidx++; // Index showing the character in the single value char onedoublecharidx++; . } // Increase the index once to jump over (;) in the line onelinecharidx++; // Convert the single value of char into one single string onedoublestring = new string(onedoublechar); // Put the single string into data buffer of one dimmension array that contain . the singles values of one line doublearraystring[lineidx] = onedoublestring; } // reset the index showing the character in the line character read onelinecharidx = 0;
ich habe mir dein quelltext nicht weiter durchgelesen, weil es irgendwie viel einfacher geht. string s = "00001; 032145,0232; 23456; 05,014; 23,0312154; 2351458654;"; list<float> zahlen = new list<float>(); s = s.replace(" ", "" ); foreach( string ss in s.Split(";" ) { float f = float.Parse( ss ); list.add( f ); } jetzt hast du alles in der liste "zahlen" drin.
Danke für die Schnelle Antwort. Ich habe Ihre Beispiel probiert und bekomme folgende Meldung Error 1 The type or namespace name 'list' could not be found (are you missing a using directive or an assembly reference?) Error 3 The name 'list' does not exist in the current context können SIe mir bitte sagen welche Using benötigt wird für diese Struktur Hier sind meine Using: using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions;
> using System.Collections.Generic;
ist richtig. Die Klasse heißt aber "List", also mit großem L.
schreib mal List gross - hatte es nicht getestet. sollte hier eigentlich drin sein: using System.Collections.Generic;
-.-
> list.add( f );
Das ist ich auch falsch und muss "zahlen.Add(f);" heißen.
Danke viel mals. ich kann mir so eine Menge sparen. nun aber eine Anfängerfrage: Erstens: Der Float ist gibt mir nur ein single pracision statt die gesamte Nachkommerstelle. zweitens: (,) wird nicht als Kommerstelle erkannt, ich nehme an (.) Meine Original Messdaten sind aber mit (,) als Nachkommerstelle wie kann ich ihm das beibringen hier ein Debug Screenshot
Sven schrieb: > Meine Original Messdaten sind aber mit (,) als Nachkommerstelle > wie kann ich ihm das beibringen s = s.Replace(",", "."); > hier ein Debug Screenshot hier mal wieder ein hinweis auf Bildformate. Screenshots solte man als PNG speichern, dann sind sie kleiner und besser lesbar.
Entschuldige für das Bild-Format. Es hat wundaber geklappt. Noch mal danke viel mals und Euch allen einen schönen amüsanten Weekend Abend gruss sven
Sven schrieb: > Danke viel mals. > ich kann mir so eine Menge sparen. Du könntest dir noch viel mehr sparen, wenn du in Erwägung ziehen würdest, dir in der nächsten Buchhandlung ein C# Buch zu kaufen.
Guten Tag For 1Woche hatte ich hier Hifle gesucht und gefunden. Meine Applikation hatte ich auch zur End geschrieben und sie lieft wie ich mir sie vorgestellt habe. Nun sollten die Kollegen aus China und Brasil die gleiche App für unseren Auswertungen verwenden und wir stellen fest dass die float Werten bei ihnen mit (,) dargestellt werden müssen. Ausserden habe ich festgestellt, dass auch manchen Stationen bei uns die float Werten mit (,) und andren mit (.) dargestellen. englisch: 123.456 deutsch: 123,456 Ich habe für die betroffenen Stationen und die Kollegen eigenen exe erstellt und die [string.Replace(".", ",");] benutzt um Zeit zu sparen. Nun suche ich eine Universalle Lösung. Die Erfassung der Raw-Werten via LabView ist bei allen gleich: mit (,). Wie kann ich Windows erzwingen nur eine der beiden erwähnten Darstellungen zu verwnden ohne die Replace-Func zu verwenden. PS. Habe bereits ein Anfängerbuch von Helmut Erlenkötter zugelegt, die Zeit ist jedoch zimlich knappt bei mir. Für eine Hilfestellung bin ich Euch sehr dankbar gruss sven
Sven schrieb: > Wie kann ich Windows erzwingen nur eine der beiden erwähnten > Darstellungen zu verwnden Wenn's unbedingt sein muss: Regions- und Sprachoptionen -> Formate -> Anpassen -> Dezimaltrennzeichen und Zifferngruppierung > ohne die Replace-Func zu verwenden. Sinnvoller ist es das Parsen universell zu machen. D.h. alles beachten/filtern was z.B. hier http://en.wikipedia.org/wiki/Decimal_mark aufgeführt ist und dann umwandeln (bzw. mit CultureInfo.InvariantCulture umwandeln lassen). > PS. Habe bereits ein Anfängerbuch von Helmut Erlenkötter zugelegt, die > Zeit ist jedoch zimlich knappt bei mir. > > Für eine Hilfestellung bin ich Euch sehr dankbar > gruss > sven
...Und schon habe ich wieder was dazugelern. Danke viel mals gruss sven
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.