Also folgendes ich habe einen
String b1 = "01:\"UnterschiedlichlangerText\"hier gehts noch weiter";
und ich möchte das aus diesem String "UnterschiedlichlangerText" in einen neuen String z.B. String b2; speichern geht das?
I like trees.
Hallo Marco24142,
na klar geht das. Was hast du schon probiert? Schonmal die String-Klassen in der MSDN angeschaut? Die helfen dir sicher. [FAQ] Wie finde ich den Einstieg in C#?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Was hast du schon probiert?
Also ich bin grad am probieren mit :
b2 = b1.Substring(4, zahl);
.
aber geht es das man statt "zahl" ein zeichen angiebt?
I like trees.
Nein.
Du musst die Position übergeben, sonst kann die Methode gar nicht wissen, welches Zeichen Du meinst, sollte dieses Zeichen mehrfach vorkommen.
Die Position kannst Du aber mit einer anderen String-Operation ermitteln: IndexOf.
Je nach Gesamtkonstellation der Strings könnte man natürlich auch der Vollständigkeit halber RegEx verwenden.
[Artikel] Regex-Tutorial
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Eine Lösung ist z.B.:
static void Main(string[] args)
{
string b1, b2;
b1 = "01:\"UnterschiedlichlangerText\"hier gehts noch weiter";
b2 = b1.Substring(4, 25);
// Kontrolle: Console.WriteLine(b2);
// Console.ReadKey();
}
Hi,
@App - genau das will er nicht - er hat ja einen unterschiedlich langen Text.
Thema ist: Sofern möglich kann man https://msdn.microsoft.com/de-de/library/0w96zd3d(v=vs.110).aspx verwenden um die korrekte Position für die Methode Substring zu finden.
Jedenfalls muss die korrekte Position definitiv selbst ermittelt werden. (IndexOf, LastIndexOf, etc.)
LG
Wie überall gibt es auch hier eine Alternative:1.zu https://regex101.com/r/GUH3IH/2/ gehen 1.mit Hilfe der Erläuterungen (rechts oben) verstehen, was passiert 1.auf "Code Generator" (links mittig) klicken 1.auf C# klicken 1.Code übernehmen und verstehen
Vorteil: du kannst sehr komplexe Suchmuster implementieren.
Nachteil: Regex muss man lernen, und der Einstieg ist nicht einfach. (verlinkte Seite hilft etwas)
LaTino
(EDIT: shame on me, hab Abts Hinweis auf regex übersehen. Aber der Link hilft vielleicht noch etwas mehr.)
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
wenn du Regex nicht kennst oder willst:
durchsuch halt deinen ersten String mit IndexOf() nach einem Zeichen, so kriegst du die Index-Nummer. Dann kannst du dir einen Teilstring erstellen
OO gibts seit Platon - hatte der auch C#?
Bitteschön (:
static void Main(string[] args)
{
string b1, b2;
b1 = "01:\"UnterschiedlichlangerText\"hier gehts noch weiter";
int a = b1.IndexOf('"', 5);
b2 = b1.Substring(4, a - 4);
// Kontrolle
Console.WriteLine($"{b2}");
Console.ReadKey();
}
Musste bei
b2 = b1.Substring(4, a - 4);
mit der Zahl nach a rumexperimentieren. Es funktioniert, aber frag mich nicht, warum ausgerechnet 4.
Dachte, dass es mit - 1 reichen würde, aber ist nicht so.
Weil der zweite Parameter von Substring die Länge des Teilstrings ist und nicht die Endposition.
App, nimms mir nicht übel - aber das ist totaler Quatsch.
Er hat ja inhaltlich gesagt, dass der zu überprüfende String immer anders aussehen kann. Das einzig sichere ist, dass er den Text innerhalb von zwei Double Quotes sucht.
Damit muss die Identifizierung der Positionen sowie die Länge des Substrings immer dynamisch erfolgen.
Damit ergibt sich inhaltlich also nur eine Lösung, die niemals mit irgendwelchen fixen Zahlen oder Ziffern arbeiten kann:
static void Main()
{
string b1 = "01:\"UnterschiedlfdsfsdfichlangerText\"hier gehts noch weiter";
char frameChar = '"';
int firstPosition = b1.IndexOf(frameChar);
int latestPosition = b1.LastIndexOf(frameChar);
string content = b1.Substring(firstPosition+1, latestPosition-firstPosition-1);
Console.WriteLine(content);
}
Online testbar auf dotnetfiddle: https://dotnetfiddle.net/yJtCPf
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Daher es sein könnte, daß im Nachhinein noch Anführungszeichen vorkommen, hätte ich es eher so gemacht:
static void Main()
{
string b1 = "01:\"UnterschiedlfdsfsdfichlangerText\"hier gehts noch weiter";
char frameChar = '"';
int startPosition = b1.IndexOf(frameChar);
int endPosition = b1.IndexOf(frameChar, startPosition+1);
string content = b1.Substring(startPosition+1, endPosition-startPosition-1);
Console.WriteLine(content);
}
Kommt halt immer auf den möglichen Inhalt an der sein kann...
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄