C# String Inhalt auslesen -> in neuen String

NichTec

Ensign
Registriert
Juli 2014
Beiträge
167
Hallo zusammen,

wahrscheinlich ist es eine relativ einfach Angelegenheit, aber ich komme nach vielem "gegoogle" nicht auf den richten Weg...

Mein Problem ist folgendes: Ich hab in meinem C# Programm einen String vorliegen der ungefähr so aufgebaut ist:

<data1="1234" data2="5678">

Jetzt möchte ich jeweils den Wert 1234 und 5678 in jeweils einen neuen String schreiben. Wie kann ich das vorliegende String so danach durchsuchen und die entsprechenden Werte auslesen, das es funktioniert.

Ich habe schon gesehen, dass man fixe Bausteine in einem String suchen kann (also wenn ich explizit nach 1234 suche) aber nicht wenn ich "dynamisch" suchen will (so wie oben beschrieben).

Das ganze ist zwar jetzt etwas unübersichtlich geworden, aber ich hoffe ihr könnt das verstehen..

Danke!
 
<data1={value1} und data2= {value2} ist immer gleich lang? Da gibt es eigentlich verschiedene Möglichkeiten wie man da rangeht. Man könnte folgendes tun: ein String.split() am mittleren Leerzeichen und dann ein String.substring() auf den Teilstrings (jeweils von Position 6 bis zum Ende) und entfernt dann noch die Anführungszeichen mittels trim.
Dann hast du die einzelnen Werte.

man könnte auch sicherlich was mit Regex machen. Wäre vielleicht eleganter, aber da muss man dann etwas mehr nachdenken^^
 
Zuletzt bearbeitet:
Ich verstehe was du meinst, ich denke was du suchst ist ggf. sowas wie string.split, du kannst dementsprechend Parameter eingeben, bei denen nach Zeichen gesucht wird (bzw. Zeichenketten) und der Teil davor oder eben danach abgeschnitten wird. Ich bin definitiv kein Profi, aber ich glaube ich hab das mal für ein paar Dinge verwendet um strings aufzuteilen, unnötige Zeichen zu entfernen und sonstiges...gibt vielleicht auch schönere Wege, aber die kenn ich vermutlich nicht ;)
 
Mit der string.split Operation ist es ganz einfach, wenn du als Trennzeichen das " Symbol verwendest:
Code:
//s ist dein String
var split = s.Split(new[]{'"'});
//Wert von data1 ist in split[1]
//Wert von data2 ist in split[3]
 
Zuletzt bearbeitet: (Grammatik)
Vielen Dank für eure schnellen Antworten. Ich habe mich mal der Einfachheit halber dem Script von pockic angenommen. Der Compiler hat kein Problem mit dem Code, jedoch wenn ich das Programm ausführe und zur entsprechenden Anweisung komme, kommt folgende Fehlermeldung: "System.NullReferenceException". Dabei wird die Zeile mit "var splitted..." markiert. Ich habe schon versucht mal mit, mal ohne Array zu arbeiten, aber es funktioniert einfach nicht...
Hättet ihr noch eine Idee?
Ich muss zugeben, ich bin noch ziemlich neu auf dem Gebiet, daher habe ich wahrscheinlich einfach irgendetwas überlesen...

Code:
var splitted = lineinput[5].Split(new[] { '"' });
this.ZustandTextbox.Text = splitted[1];

lineinput ist das Array, in dem der Text steht und ZustandTextbox ein Textfeld, dass mir einfach zur Kontrolle den Wert anzeigen soll...
Ergänzung ()

Und prompt habe ich meinen Fehler gefunden: Ich hatte einen Fehler beim Einlesen des Arrays gemacht, und ein leeres Array konnte das Programm nicht verarbeiten -.-

Vielen Dank für eure Hilfe!!!
Ergänzung ()

Ok, ich bräuchte nocheinmal eure Hilfe:

Bevor die Daten, wie oben beschrieben, verarbeiten kann, muss ich sie Zeilenweise aus einer Datei auslesen. Das Problem ist nur, dass im Array unter Inputline[0] nur die erste und unter inputline[1] die letzte Zeile eingelesen ist.

Könnt ihr mir sagen wo mein Fehler ist?
Code:
int counter = 0;
string line;
string[] inputline = new string[512];

OpenFileDialog ofd = new OpenFileDialog();
ofd.InitialDirectory = Environment.SpecialFolder.MyMusic.ToString();
ofd.Filter = "txt files|*.txt";
ofd.FilterIndex = 1;
ofd.ShowDialog();
if (ofd.FileName != "")
{
       System.IO.StreamReader file = new System.IO.StreamReader(ofd.FileName);
       while ((line = file.ReadLine()) != null)
       {
              inputline[counter] = line;
              counter = +1;
        }
}
 
Ich bin so ein Idiot -.-

Vielen Dank!
Ergänzung ()

Kann mir jemand erklären, warum:
Code:
int count = 0;
count++;
zu einem Fehler beim ausführen führt?

Der komplette Code:
Code:
while ((line = file.ReadLine()) != null)
{
        inputline[count] = line;
        count++;
}
 
Zuletzt bearbeitet:
Klar: "System.IndexOutOfRangeException"
Hatte ich vergessen :)
 
Vielen vielen Dank!!!
Manchmal sind es halt doch die einfach Fehler :)
 
ginge natürlich auch noch bissi smarter mit File.ReadAllLines bekommst du das selbe nur kürzer und sauberer hin

Code:
string[] inputline = null;

Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog() {
	InitialDirectory = Environment.SpecialFolder.MyMusic.ToString(),
	Filter = "txt files|*.txt",
	FilterIndex = 1
};

if ( ofd.ShowDialog() == true ) {
	inputline = System.IO.File.ReadAllLines( ofd.FileName );
}
 
Zuletzt bearbeitet:
Nur zum Verständnis (bevor ich meinen Code umbaue) habe ich dann in meinem Array trotzdem jede Zeile einzeln stehen?
 
Ok, vielen Dank für den Hinweis. Ich baue es gleich ein.
Ergänzung ()

Es gibt nur ein kleines Problem bei der Sache:
Code:
Der Operator '==' kann nicht auf Operanden vom Typ 'System.Windows.Forms.DialogResult' und 'bool' angewendet werden.
Ergänzung ()

Ich habe es der Einfachheit halber so gelöst:
Code:
ofd.showDialog();
if(ofd.FileName != "") {
inputline = System.IO.File.ReadAllLines( ofd.FileName );
}

Das sollte ausreichen um zu kontrollieren, dass der Benutzer eine Datei geöffnet hat...

Übrigens: Das ganze "Microsoft.Win32." muss draußen bleiben, sonst versteht es C# nicht.
 
Zuletzt bearbeitet:
kennen tut er das ganze schon ;) hab nur nicht drauf geachtet und nen anderen verweis genutzt
"Microsoft.Win32", deins kam aus "System.Windows.Forms" somit kannst du deine if nach
Code:
if( ofd.showDialog() == DialogResult.OK )
bauen wenn ichs richtig in erinnerung hab
 
pockic schrieb:
Code:
//s ist dein String
var splitted = s.Split(new[]{'"'});

Da ich gerade in Klugscheißerlaune bin, split ist ein irreguläres Verb. Past tense und past participle sind beide "split", nicht "splitted". ;)
 
Zurück
Oben