PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visual c# string Problem! Brauche Hilfe!


ccebrail
06.09.2003, 01:57
Hi alle zusammen,

Ich habe ein kleines Problem, ich hoffe, dass ihr mir weiter Helfen könnt!
Ich habe einige Zeilen, von der ich was bestimmtes Rauschneiden will!

zB. "AAAasaaadhjölkalkhddde fff ea"

das fff am ende möchte ich, in eine TextBox ausgeben lassen.

Ich arbeite mit der Programmierumgebung "Visual C#" von "MS Visual Studio.Net Enterprise Edition 2003"
Ich muss mit String´s arbeiten, will erst die genaue position von "fff" raus finden und dann denn Rest des Textes löschen und nur die "fff" in meine textBox ausgeben lassen.

Ich hoffe, dass ich ungefähr erklären konnte, was ich machen möchte. Danke in voraus für alle eure antworte!


Mit Freundlichen Grüßen

cebrail


Pulpapex
06.09.2003, 04:55
Da gibt es einige Möglichkeiten.

Du könntest mit String.IndexOf die Indices der Leerzeichen suchen lassen und dann mit String.Substring den Teilstring auschneiden.

Oder du benutzt String.Split und trennst den String an den Leerzeichen in drei Teilstrings auf.

Eine dritte Möglichkeit wäre ein regulärer Ausdruck, der den Text zwischen den Leerzeichen findet. In deinem Fall ist das wohl ein bisschen zu viel Overkill. Aber was solls, das würde dann so aussehen.
// using System.Text.RegularExpressions;

// Liefert Zeichenketten, die von Whitespaces
// (Space, Tab, Enter) eingeschlossen sind.
Regex regex = new Regex("\s+.*\s+");

foreach(Match m in regex.Matches(text)) {
string fff = m.Value;
}

Gruß
Pulpapex

ccebrail
09.09.2003, 09:31
Danke für deine antwort!

Aber ich muss mit String.IndexOf die Indices der Leerzeichen suchen lassen und dann mit String.Substring den Teilstring ausschneiden.

Das mit „fff“ (AAAasaaadhjölkalkhddde fff ea) war nur ein Bsp. Meine eigentliche aufgabe ist es:


<TABLE cellSpacing=0 cellPadding=0 align=left border=0 valign="middle"><TBODY><TR><TD><TABLE cellSpacing=0 cellPadding=0 width=15 border=1 border-color="gray"><TBODY><TR Border="1"><TD id=809746_1 style="BACKGROUND: gray" width=15 height=10></TD></TR></TBODY></TABLE></TD><TD style="PADDING-RIGHT: 3px;
PADDING-LEFT: 3px; FONT-SIZE: 10px; FONT-FAMILY: verdana; allign: left" noWrap allign="left" cellspacing="0px" cellpadding="0">123frei</TD></TR></TBODY></TABLE>

ungefähr am ende des Textes steht "123frei", denn muss ich in meine TextBox ausgeben lasen.

Ich bin noch ein Anfänger ich hoffe, dass jemand mir helfen kann.
Ich bin nur so weit gekommen aber weiter weiß ich leider nicht.

string s= "<TABLE cellSpacing=0 cellPadding=0 align=left border=0 valign='middle'><TBODY><TR><TD><TABLE cellSpacing=0 cellPadding=0 width=15 border=1 border-color='gray'><TBODY><TR Border='1'><TD id=809746_1 style='BACKGROUND: gray' width=15 height=10></TD></TR></TBODY></TABLE></TD><TD style='PADDING-RIGHT: 3px;PADDING-LEFT: 3px; FONT-SIZE: 10px; FONT-FAMILY: verdana; allign: left' noWrap allign='left' cellspacing='0px' cellpadding='0'>123frei</TD></TR></TBODY></TABLE>';";

int ss=s.LastIndexOf ("</TD>");


…cellpadding='0'>123frei</TD>…

Ich will erst nach dem letzten „</TD>“ suchen, damit ich die Position habe,
dann das irgendwie löschen und nach dem letzten „>“ suchen und das dann auch irgendwie wie löschen, dann bleibt mein 123frei nur noch übrig. Denn will ich dann in meine TextBox einfügen.

Hoffentlich hat mich jemand verstanden :)

DANKE IM VORAUS FÜR EURE ANTWORTEN!

ccebrail

Pulpapex
09.09.2003, 22:19
Guck dir mal den System.Xml-Namespace an. Der Namespace enthält die Klassen XmlTextReader und XmlDocument, mit denen man natürlich auch Html lesen kann. Mit dem Reader werden Daten sequenziell eingelesen. Man ruft in einer Schleife Read auf und kann danach über die Reader-Eigenschaften die gelesenen Daten abfragen. Das geht schnell und ist resourcenschonend. Das XmlDocument implementiert ein Xml-DOM (Document Object Model). Ein XmlDocument wird zunächst vollständig eingelesen. Danach kann man die Daten in einer baumförmigen Node-Struktur durchforsten.

Mit einem regulären Ausdruck ist das Problem auch immer noch einfach lösbar. Man sucht nach dem Text in spitzen Klammern, der vor </TD> steht. Es gibt dann zwar mehrere Treffer, auf die das zutrifft, aber es soll ja der letzte Treffer sein.
// using System.Text.RegularExpressions;

// Regulärer Ausdruck, sollte als static in der Klasse definiert sein,
// damit er nur einmal beim Programmstart compiliert wird.
Regex tdRegex = new Regex(">(?<text>.*)</TD>", RegexOption.Compiled |
RegexOption.IgnoreCase);


// Alle Treffer im inputString bestimmen.
MatchCollection matches = tdRegex.Matches(inputString);

// Der letzte Treffer ist der gesuchte.
string text = null;
if(matches.Length > 0) {

// Aus dem Treffer die im Ausdruck als "(?<text>.*)"
// definierte Gruppe extrahieren. Ihr Wert ist der gesuchte Text.
text = matches[matches.Count - 1].Groups["text"].Value;
}