Entwickler-Ecke
C# - Die Sprache - Inhalt eines Strings in verschiedene Datentypen verteilen
coolace - Mo 21.04.08 20:03
Titel: Inhalt eines Strings in verschiedene Datentypen verteilen
Hallo erstmal,
hab dieses wunderschöne Forum auf der Suche nach Hilfe gefunden :-)
Folgendes, ich muss mich im Sinne meines Studiums mit C# beschäftigen
und bekomme folgende Aufgabe nicht hin.
| Zitat: |
| Dem Programm werden beliebige Zahlen als Kommandozeilenparameter übergeben, es speichert ganze Zahlen (aus dem int-Bereich) in einem int -Feld i1, Zahlen aus dem long-bereich in einem long-Feld l1; Kommazahlen in einem double Feld l1. Ungültige Zahlenformate werden nicht gespeichert. |
Das heißt für mich ich bekomme meine Werte als String übergeben, finde
aber keine passende Methode den Inhalt auf diese Datentypen zu überprüfen.
Wer könnte mir gedankentechnisch einen Schubs in die richtige Richtung geben.
Gruß
Coolace
Moderiert von
Narses: Quote-Tags hinzugefügt
Kha - Mo 21.04.08 20:23
Du kannst jeden der Datentypen "versuchsweise" mit seiner statischen TryParse-Methode einlesen und bei einem Fehler mit dem nächsten Typ fortfahren. Jetzt musst du dir nur noch eine sinnvolle Reihenfolge überlegen ;) .
Achja: Wenn mehrere Zahlen gleichzeitig übergeben werden können, würde ich den Input erst per String.Split an den Leerzeichen auftrennen.
bakachan - Di 22.04.08 07:06
| Zitat: |
| als Kommandozeilenparameter übergeben |
Deine Werte werden dir als String-Array übergeben.
Je nachdem wie musst du sie eventuell erst noch splitten (String.Split oder RegEx).
Danach würd ich sagen machst du dir 3 Listen oder Felder (1 int, 1 long, 1 double) und je nach Datenbereich (also wenn TryParse true zurückgibt) ordnest du zu.
coolace - Di 22.04.08 15:53
Hy,
vielen vielen Dank für eure Antwort, das ist nun herausgekommen aber das Programm stürzt nach dem Ausführen aus
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
| using System; using System.Collections.Generic; using System.Text;
namespace Program { class Program { static void Main(string[] args) { int[] izahlen = new int[args.Length]; long[] lzahlen = new long[args.Length]; double[] dzahlen = new double[args.Length];
for (int i=0; i<=args.Length; i++) { try { izahlen[i] = Convert.ToInt16(args); } catch (FormatException) {
try { lzahlen[i] = Convert.ToInt64(args); } catch (FormatException) {
try { dzahlen[i] = Convert.ToDouble(args); } catch (FormatException) { Console.WriteLine("\nUngültiges Zahlen Format"); } } }
} for (int i = 0; i <= args.Length; i++) { Console.WriteLine("\nElement:"+i+izahlen[i]); Console.WriteLine("\nElement:" + i + lzahlen[i]); Console.WriteLine("\nElement:" + i + dzahlen[i]); } } } } |
Danke und Gruß
Coolace
Moderiert von
Christian S.: C#-Tags hinzugefügt
bakachan - Di 22.04.08 15:57
Benutze anstelle von Convert lieber TryParse dann stürzt es auch nicht ab wenn der Datentyp nicht passt
coolace - Di 22.04.08 16:28
das war aber meine Überlegung das er falsche Formate erkennt um im catch block dann entsprechend wenns passt zurodnet oder hab ich da was falsch verstanden ?
JüTho - Di 22.04.08 16:56
Deshalb ist ein Blick in die
SDK-Doku immer nützlich: Dort steht nämlich, was
TryParse ist und macht:
| Zitat: |
| Konvertiert die Zeichenfolgendarstellung einer Zahl in die entsprechende 32-Bit-Ganzzahl mit Vorzeichen. Ein Rückgabewert gibt an, ob die Operation erfolgreich abgeschlossen wurde. |
Rückgabewert -> Erfolg oder nicht!
Jürgen
Kha - Di 22.04.08 18:22
Ich habe mich ja schon oben für TryParse ausgesprochen, aber grundsätzlich ist doch nichts gegen seine Methode einzuwenden (wäre eben der 1.1-Weg ;) ). Eine Fehlermeldung wäre allerdings schöner als "stürzt ab".
Zwei Tipps: Die Schleifen laufen zu weit, außerdem wirst du am Ende ziemlich viele Nullen in den Arrays haben - ich würde lieber drei Listen (List<T>) benutzen und diese per Add füllen.
coolace - Mi 23.04.08 17:08
Hy,
vielen vielen Dank an alle die mir geholfen haben, jetzt funktioniert es. Mit Tryparse ist es sicherlich eleganter aber ich hab meinen Fehler gefunden der eigentlich nicht passieren darf
static void Main(string[] args) // dies liefert ein Charakter Feld zurück und ich hab in der Schleife die Geschichte nicht mit einem Indexzähler versehen, mit args[i] klappts
Dafür hab ich aber Tryparse kennengelernt und werde in Zukunft das verwenden.
Schönen Tag und Gruß
CoolAce
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!