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.
