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
String auf mehrere Zeilen prüfen
Rico913
myCSharp.de - Member



Dabei seit:
Beiträge: 89

Themenstarter:

String auf mehrere Zeilen prüfen

beantworten | zitieren | melden

Hi,

ich würde gern ein String darauf prüfen, ob sein Inhalt einzeilig oder mehrzeilig ist.

Sozusagen möchte ich ja nach Inhalt das StringAlignment ändern:


string Text = XXX.Label_Text;
SizeF TextSize = TextRenderer.MeasureText(Text, new Font(Font_OCR_Label.Name, Font_Size_temp));

StringFormat sf = new StringFormat();

if(Text == einzeilig)
{
    sf.Alignment = StringAlignment.Center;
}
else
{
   sf.Alignment = StringAlignment.Near;
}

private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1892
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Im einfachsten Fall kannst du mit Split den String aufteilen.
Wenn das Ergebnis Length == 1 hast du nur eine Zeile ansonsten mehrere.
Dabei musst du beachten, dass es unter Windows \r\n und unter allen anderen sonst \n gibt.
Kann man aber mit Split(new char[] { '\n', '\r' } abfangen.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3777
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden


if (Text.Contains(Environment.NewLine)) ...

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16098

beantworten | zitieren | melden

Environment.NewLine ist der bessere Weg.
Bitte, wenn möglich nicht mehr manuell auf \r\n bzw \n prüfen; ansonsten bekommt man schnell Probleme, wenn man bedenkt, dass .NET mittlerweile Multi Plattform ist.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1892
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@Abt
Stimmt.
Liegt aber auch daran, dass NewLine beim Framework noch "\r\n" hardcoded war.
Entsprechend lieferte die Split dann bei Texten mit \n only nur eine Zeile, weshalb ich dies immer über die char[] Variante mache.
Bei .NET 5 ist es nun auf "\n" umgestellt, da klappen beide Fälle.

.NET Framework:
https://referencesource.microsoft.com/#mscorlib/system/environment.cs,63a04833d43dd9d3

.NET 5:
https://source.dot.net/#System.Private.CoreLib/Environment.cs,63a04833d43dd9d3

dotnet Fiddle Beispiel:
https://dotnetfiddle.net/dQRRiw

T-Virus
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am .
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7559
Herkunft: Waidring

beantworten | zitieren | melden

Hallo T-Virus ,
Zitat
Bei .NET 5 ist es nun auf "\n" umgestellt, da klappen beide Fälle.
source.dot.net sucht in der Unix-basierten Runtime, daher ist deine Aussage nicht ganz vollständig.

Environment.UnixOrBrowser.cs <-> Environment.Windows.cs.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4132

beantworten | zitieren | melden

Aber unter Windows ist auch bei .NET 5 dieser Wert weiterhin "\r\n" (habe es gerade bei einem WindowsForms-Projekt in VS 2019 ausprobiert).
Hätte mich auch stark gewundert, wenn dies geändert worden wäre.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 385
Herkunft: Kassel

beantworten | zitieren | melden

Bei Plattform spezifischen Sachen bitte immer mitdenken, dass die auswertende Plattform eine andere sein kann, als die eingebende.

Beispiel: Eingabe unter Windows im Browser auf eine ASP.NET Core Seite, die unter Linux läuft!
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5983
Herkunft: Leipzig

beantworten | zitieren | melden

Wenn man nur wissen möchte, ob ein String einen Zeilenumbruch enthält, dann geht das am einfachsten so:


bool isMultiLine = someText.Contains('\n');

Das funktioniert mit Texten von (fast) allen Systemen, denn die meisten Systeme benutzen irgendeine Kombination mit '\n' oder nur '\n' für einen Zeilenumbruch.
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16098

beantworten | zitieren | melden

No, MacOS hat \r (und uralt IBM Server nutzen noch mal nen anderen Quatsch)(
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3777
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Falls das .NET auf einem System nicht korrekte Werte zurückgibt würde ich die Zeichen nicht in die if Abfrage einbauen sondern eher eine eigene Methode schreiben :


if (Text.Contains(EnvironmentNewLine()))
    ...

public string EnvironmentNewLine()
{
    if (Environment.OS == "IBM Xenix") return "\n";      // nur ein Beispiel
    else return Environment.NewLine;
}


Wenn ich eine Abfrage nur einmal brauche und das dann auch noch so selbstbeschreibend ist speichere ich nicht in einer Zwischenvariablen.

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4132

beantworten | zitieren | melden

@Abt, aber nur beim alten Classic Mac OS, seit Mac OS X wird (wie bei Unix) '\n' benutzt - steht auch so in der deutschen als auch englischen Wiki: NewLine: Representation + Zeilenumbruch: Codierung des Zeilenumbruchs
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7559
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,
Zitat
aber nur beim alten Classic Mac OS, seit Mac OS X wird (wie bei Unix) '\n' benutzt
Würde jetzt Windows auch nur noch auf \n setzen, so wäre etlicher Code einfacher und performanter (beides zugleich: Juhuu) zu schreiben.
Ist vermutlich mehr ein Wunsch als (nahe) Realität.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1892
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@gfoidl
Ich geb die Hoffnung nicht auf
Vor 10 Jahren hätte ich auch Leute ausgelacht, die mir erklären Software von Microsoft läuft auch irgendwann auf Linux
Und Heute nutzen wir zur Entwicklung den SQL Server auf einer Linux Bude im Container.
Also kann sich da auch noch was ändern.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers