Laden...

String auf mehrere Zeilen prüfen

Erstellt von Rico913 vor 2 Jahren Letzter Beitrag vor 2 Jahren 536 Views
R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 2 Jahren
String auf mehrere Zeilen prüfen

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


T
2.219 Beiträge seit 2008
vor 2 Jahren

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.

3.825 Beiträge seit 2006
vor 2 Jahren

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

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

16.806 Beiträge seit 2008
vor 2 Jahren

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.

T
2.219 Beiträge seit 2008
vor 2 Jahren

@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

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.

6.911 Beiträge seit 2009
vor 2 Jahren

Hallo T-Virus ,

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!"

4.931 Beiträge seit 2008
vor 2 Jahren

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.

P
441 Beiträge seit 2014
vor 2 Jahren

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!

5.657 Beiträge seit 2006
vor 2 Jahren

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

16.806 Beiträge seit 2008
vor 2 Jahren

No, MacOS hat \r (und uralt IBM Server nutzen noch mal nen anderen Quatsch)(

3.825 Beiträge seit 2006
vor 2 Jahren

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

4.931 Beiträge seit 2008
vor 2 Jahren

@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

6.911 Beiträge seit 2009
vor 2 Jahren

Hallo,

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!"

T
2.219 Beiträge seit 2008
vor 2 Jahren

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