| 

.NET C# Java Javascript Exception

3
Die Daten sehen etwa so aus:
Troisdorf Bernd 18273.344 89749.34 2388 0923


nachdem es ja mit string.Format eine formatierte Ausgabe gibt, dachte ich, dass es auch eine formatierte Eingabe geben müsste. Hab aber nichts gefunden. Könnt ihr helfen?
25.02.2011
sanschi 31 1
Idealerweise würde ich gern sowas zurückhaben, was es in PHP gibt: list($nachname, $vorname, $pointsA, $pointsB, $queryA, $queryB) = ... so dass die Werte gleich in Variablen stehen.
sanschi 25.02.2011
5 Antworten
1
Eine formatierte Eingabe in was? In Deine bereits bestehende Klasse?
Also falls Dir ein simples Array reicht und die Daten immer mit Leerzeichen getrennt sind, dann kannst Du auch

String data = "Troisdorf Bernd 18273.344 89749.34 2388 0923";
var myArray = data.Split(' ');


verwenden. Könnte nur bei Orten mit Leerzeichen ein Problem werden, so wie die Zeichenfolge aufgebaut ist.
25.02.2011
Jens Duczmal 2,2k 2 8
1
Das wäre doch ein prima Fall für RegEx:

List<double> result = new List<double>();

Regex re = new Regex(@"(\d*\.\d*|\d*)");
MatchCollection mc = re.Matches("Troisdorf Bernd 18273.344 89749.34 2388 0923");

foreach (Match mt in mc){
//alternative kannst du hier auch double.TryParse(..) verwenden
result.Add((double)mt.ToString());
}
27.02.2011
Floyd 11,0k 3 9
0
Vielleicht ist das für dich interessant (Ich sags aber gleich: Das habe ich nicht selber probiert, kann daher nichts über die Qualität sagen):

www.blackbeltcoder.com/Articles/strings/a-sscanf-replacement-for-net
25.02.2011
nabuchodonossor 1,2k 4
-1
was spricht gegen eine Klasse?

public class MyList
{
public string Nachname { get; set; }
public string Vorname { get; set; }
public decimal PointsA { get; set; }
public decimal PointsB { get; set; }
public object QueryA { get; set; } //query datentyp definieren
public object QueryB { get; set; } //query datentyp definieren
}


oder aber , wenn du .NET 4.0 verwendest, könntest du die Klasse Tuple verwenden

var myTuple = Tuple.Create("Troisdorf", "Bernd", 18273.344, 89749.34, 2388, 0923);
Console.WriteLine("{0} {1} {2} {3} {4} ", myTuple.Item1, myTuple.Item2, myTuple.Item3, myTuple.Item4, myTuple.Item5);
25.02.2011
Mario Priebe 5,8k 2 9
1
jetzt noch ein klitzekleines Beispiel, wie man mit dieser Klasse den String EINlesen kann...
ralf.w. 25.02.2011
hab ich irgendwas falsch verstanden?! :-)
Mario Priebe 25.02.2011
Nun ja, offenbar haben ralf w. und alle anderen Antwortenden die Frage, und darin wohl vor allem "formatierte Eingabe" und den Verweis auf string.Format, so verstanden, dass es darum geht, einen String in verschiedene Werte zu zerlegen, und darauf gehst Du überhaupt nicht ein. Aber vielleicht standen ja auch wir anderen auf der Leitung. Ich muss gestehen, ich sehe einen ziemlich großen inhaltlichen Abstand zwischen der eigentlichen Frage und dem Kommentar von sanschi dazu.
Matthias Hlawatsch 26.02.2011
nun, solange sanschi sich nicht dazu äußert, stehen wir wohl alle auf dem Schlauch :)
Mario Priebe 26.02.2011
Vielen Dank euch allen. Gemeint ist aber tatsächlich die Gegenrichtung: Zerlege String in Variableninhalte. Beispiel wäre eine CSV-Datei mit einzelnen Zeilen und Daten darin.
sanschi 27.02.2011
-2
Hm, als (sehr grob gesehenes) Gegenstück zu

string.Format("...");

würden mir regular expressions einfallen (namespace System.Text.RegularExpressions).
Dein Beispiel läßt leider nicht genau erkennen, was daran Formatierung ist (im Sinne des Format-Strings bei der Ausgabe) und was Daten, und wie Du Dir das Ergebnis vorstellst.

Ergänzung, nachdem ich Deinen Kommentar zu Deiner Frage gelesen habe:

list ist in PHP (laut Doku, ich habe mich sonst noch nicht damit beschäftigt) ein Sprachkonstrukt, das mehrere Variablen auf einmal mit den Werten aus einem Array befüllen kann. Dazu gibt es in C# kein Äquivalent.

Mit formatierter Ein- oder Ausgabe hat das aber erst mal nichts zu tun. Mit string.Format() setzt man ja einen Format-String und mehrere Werte zu einem String zusammen, z.B. so
string name = "Hans";
int alter = 42;
string ausgabe = string.Format("{0} ist {1} Jahre alt.", name, alter);

Eine formatierte Eingabe als Gegenstück dazu müßte aus dem String "Hans ist 42 Jahre alt." den String "Hans" und den Integer 42 herausziehen. Das Zerlegen in die einzelnen Bestandteile geht z.B. mit einer RegEx, anschließend müßtest Du den String "42" noch in einen Integer parsen.

Falls Deine Eingabe einfach nur aus den einzelnen Werten besteht, die durch ein festes Trennzeichen getrennt sind (z.B. "Hans 42"), kannst Du wie von Jens vorgeschlagen die Split-Methode verwenden, die dann aber eher das Gegenstück zu string.Join() ist als zu string.Format(). Und sie liefert Dir natürlich ein string[] - auch hier müßtest Du ggf. selbst noch für die Umwandlung in einen anderen Datentyp sorgen.
25.02.2011
Matthias Hlawatsch 8,4k 2 8
Als Gegenstück zur formatierten Ausgabe sehe ich auch einen Parser und das ist mit regular expressions gut zu realisieren.
Jürgen Luhr 25.02.2011
Sorry, aber ich verstehe nicht, was an meinem Vorschlag "falsch, unpassend, störend oder Spam" (so der entsprechende Tooltip) ist, dass es da zwei negative Bewertungen dafür gibt.
Matthias Hlawatsch 27.02.2011

Stelle deine .net-Frage jetzt!