PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C#] Ein String kürzen an bestimmter Stelle



Archy
05.11.2011, 22:38
Ich bräuchte mal Hilfe und zwar möchte ich den Text, wie er unten zu sehen ist, kürzen. Dabei möchte ich die ID + Doppelpunkt löschen. Ich habe zu Anfang versucht alles mit .Replace() zu ersetzen aber dann würden auch die Zahlen in den Gametiteln fehlen. Dann wollte ich mit Hilfe einer Schleife in jeder Zeile die ersten 10 Zeichen löschen, aber auch das funktioniert nicht, da die IDs manchmal kürzer oder länger sind.

[15520] : AaAaAA!!! - A Reckless Disregard for Gravity
[22610] : Alien Breed: Impact
[57300] : Amnesia: The Dark Descent
[18700] : And Yet It Moves
[24420] : Aquaria
[55040] : Atom Zombie Smasher
[12900] : Audiosurf

Für eure Hilfe wäre ich außerordentlich dankbar.

DrWhiteLetter
05.11.2011, 22:43
Regular Expression sind dein Freund.

Padrino
05.11.2011, 22:53
Wenn man es nicht mit RegEx machen möchte, so würde ich es in deinem fall folgendermaßen machen...

Wenn der Text jetzt z.b in einer Richtextbox steht:

VB.Net


Dim neuerstring As String = ""
For Each line In richtextbox1.lines
neuerstring &= line.Replace("[" & (Split(Split(line, "[")(1), ":")(0)) & ":", Nothing) & vbNewLine
Next
MsgBox(neuerstring)
Translated to C#


string neuerstring = "";
foreach (object line_loopVariable in richtextbox1.lines) {
line = line_loopVariable;
neuerstring += line.Replace("[" + (Strings.Split(Strings.Split(line, "[")[1], ":")[0]) + ":", null) + Constants.vbNewLine;
}
Interaction.MsgBox(neuerstring);

EDIT:// Ich habe vergessen, dass du nach jedem replacen(Einfügen in die Variable eine neue zeile manuell eintragen musst, sonst kommt da nur zusammengequetchter müll raus)

IRET
05.11.2011, 23:47
Die Stringklasse hat da eine Methode namens Remove. Die macht genau das was du brauchst.
http://msdn.microsoft.com/en-us/library/d8d7z2kk.aspx
Beispiel (25 ist die ID):
C#:


string str = "blabla:25:xyz";
str = str.Remove(6,3);
VB.Net:


Dim str As String = "blabla:25:xyz"
str = str.Remove(6, 3)
Sollte "blabla" keine feste Größe haben hilft das hier:
C#:


string str = "blabla:25:xyz";
string[] str_arr = str.Split(':');
str = str.Remove(str_arr[0].Length,3);
VB.Net


Dim str As String = "blabla:25:xyz"
Dim str_arr As String() = str.Split(":"C)
str = str.Remove(str_arr(0).Length, 3)

Und das selbe Spielchen halt wenn diverse andere Sachen eine unbestimmte Länge haben ;).

Ich habe das jetzt mal einfach so von Hand geschrieben ohne es zu testen, also verzeiht mir bitte diverse Fehler ;).

Newfag
06.11.2011, 02:23
\[(\d+)\]:(.*)

inout
06.11.2011, 03:29
@ocz: Wenn die Ids immer unterschiedlich lang sind, wie kann er dann das genaue ende von der id angeben?
Substring(0,X)

Schonmal was von strpos() bzw. indexOf() gehört?
oh man, warum einfach, wenn es auch kompliziert geht... :D