Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Text aus einem anderen String kopieren
Marco24142
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

Text aus einem anderen String kopieren

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Marco24142 am .
I like trees.
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2.209
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Marco24142
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

Zitat von Coffeebean
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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Marco24142 am .
I like trees.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.306

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
User30742
myCSharp.de - Member



Dabei seit:
Beiträge: 26

beantworten | zitieren | melden

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();
        }
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1.029
Herkunft: Mainz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3.003
Herkunft: Thüringen

beantworten | zitieren | melden

Wie überall gibt es auch hier eine Alternative:
  1. zu https://regex101.com/r/GUH3IH/2/ gehen
  2. mit Hilfe der Erläuterungen (rechts oben) verstehen, was passiert
  3. auf "Code Generator" (links mittig) klicken
  4. auf C# klicken
  5. 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)
private Nachricht | Beiträge des Benutzers
CWolle
myCSharp.de - Member

Avatar #avatar-4065.jpg


Dabei seit:
Beiträge: 57
Herkunft: Süddeutschland

beantworten | zitieren | melden

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#?
private Nachricht | Beiträge des Benutzers
User30742
myCSharp.de - Member



Dabei seit:
Beiträge: 26

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 235

beantworten | zitieren | melden

Weil der zweite Parameter von Substring die Länge des Teilstrings ist und nicht die Endposition.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.306

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ThomasE.
myCSharp.de - Member



Dabei seit:
Beiträge: 456

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers