Laden...

Text aus einem anderen String kopieren

Erstellt von Marco24142 vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.142 Views
M
Marco24142 Themenstarter:in
2 Beiträge seit 2018
vor 6 Jahren
Text aus einem anderen String kopieren

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.

2.207 Beiträge seit 2011
vor 6 Jahren

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

M
Marco24142 Themenstarter:in
2 Beiträge seit 2018
vor 6 Jahren

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.

16.807 Beiträge seit 2008
vor 6 Jahren

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

U
26 Beiträge seit 2018
vor 6 Jahren

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();
        }

1.029 Beiträge seit 2010
vor 6 Jahren

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

3.003 Beiträge seit 2006
vor 6 Jahren

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)

57 Beiträge seit 2012
vor 6 Jahren

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#?

U
26 Beiträge seit 2018
vor 6 Jahren

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.

D
261 Beiträge seit 2015
vor 6 Jahren

Weil der zweite Parameter von Substring die Länge des Teilstrings ist und nicht die Endposition.

16.807 Beiträge seit 2008
vor 6 Jahren

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

T
461 Beiträge seit 2013
vor 6 Jahren

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... 😄