PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variable in String...


tsaG
2008-12-04, 21:16:34
Hi

Ich habe eine ellen langes Textdokument welches als String eingelesen wird und durch replace ein paar Formatierungen erhält. Nun möchte ich auch die Account nummer bspw. Als Hyperlink nach Schema F (also beim ersten wäre es bspw http://blabla.com/325 ) erstellen. Nur wie kann ich der Replace funktion sagen das ich den Zahlencode nach Account haben möchte?
Ich könnte natürlich auch nach Account splitten, jedoch hätte ich dann Trotzdem keinen einzelnen String mit der Zahlenkombination. Der String geht nach den Zeilen hier noch weiter. besteht also aus mehreren Eingeklammerten begriffen etc, also fällt (denke ich ) die Split version raus..

Kann man denn eigentlich mit Variablen Replacen? so bspw
cheatstringnew = Replace(cheatstring, "Account" + *folgende Zahl*, "http://blablabla.com/" + *folgende Zahl*)
gibt es sowas?

[2008-12-03 21:39:21] Account 325 [INGO1], IP 84.169.68.211,
[2008-12-03 21:27:57] Account 106381 [HEYROD], IP 88.78.54.142,

achja, sprache ist vb.net

Problem ist ja auch das die Zahlen nicht immer gleich lang sind.

Kinman
2008-12-04, 22:23:10
Ich kann Dir nicht direkt helfen, aber ich werfe einfach mal den Begriff regex bzw. Regular Expressions in den Raum. Damit kannst Du so etwas machen.
Such einfach mal nach vb.net regex Beispielen und schreib Dir was ähnliches um.

mfg Kinman

ScottManDeath
2008-12-04, 22:23:46
.NET Regular Expressions koennen sowas machen in dem sie einzelne Subausdruecke getrennt speichern.

Gast
2008-12-04, 22:29:34
Auf die Schnelle:

http://www.regular-expressions.info/dotnet.html
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(VS.80).aspx

lg

Gast
2008-12-04, 22:30:26
3 Dumme, ein Gedanke :D

tsaG
2008-12-04, 22:47:09
Ah, vielen dank werde mir das mal anschauen.

Wollte noch eine Suchfunktion einbauen. Leider habe ich im Netz keine gefunden und wollte mir meine eigene Basteln...

Leider liesst der Streamreader wohl keine mehrzeiligen Textboxen aus

Hier der Code Dim r As New StreamReader(TextBox1.Text)
Dim Lines() As String
Lines = TextBox1.Text.Split(Environment.NewLine)
Dim i As Integer
For i = 0 To Lines.Length - 1
Dim tstring As String = r.readline
If InStr(tstring, TextBox2.Text) Then
TextBox1.Clear()
TextBox1.Text = TextBox1.Text + tstring
End If
Next

Am roten punkt hakt es, wie kann ich denn sonst eine Spezielle Zeile auslesen? Stichwort Split array, könnte mir vorstellen das es damit funktioniert, jedoch hab ich gerade ein 100m² großes Brett vor dem Kopf :frown:

Textbox1 = text der ausgelesen wird.
Textbox2 = Wort nach dem gesucht wird.

EDIT: Aah, ich glaub ich habs gleich mit Regex gelöst :D

Gnafoo
2008-12-04, 23:19:30
Ist ganz einfach:


string input = "Account 123";
string result = Regex.Replace(input, @"Account\s+(?<zahl>\d+)", "http://blabla.com/${zahl}");


Regular expressions können sehr umständlich aussehen, aber es ist oft hilfreich sie einigermaßen zu kennen. :)

tsaG
2008-12-04, 23:30:16
Hm, das ist in C, oder? Vb.net erkennt glaube ich leider keine Variablen innerhalb von strings ("http://blabla.com/${zahl}") oder täusche ich mich da?

Naja, ansonsten muss ich vielleicht mal auf Cpp umsteigen ^^

Sephiroth
2008-12-04, 23:54:02
Das von Gnafo ist wohl eher C#.
$zahl bezieht sich auf die Gruppe an Zeichen, die mit ?<zahl> definiert wurde; in dem Falle eben die gesuchten Zahlen.

In VB.Net sollte der Code ähnlich sein. (siehe Links vom Gast)

Gnafoo
2008-12-05, 00:17:38
Ehm ja das war C#. Ich habs mal kurz in VB.net probiert (da ich mit Erstaunen festgestellt habe, dass es auch installiert ist :D).


Imports System.Text.RegularExpressions
' ...

Dim input As String
Dim result As String
input = "Account 123"
result = Regex.Replace(input, "Account\s+(?<zahl>\d+)", "http://blabla.com/${zahl}")


Das "${zahl}" wird ganz gewöhnlich von Regex.Replace ausgewertet. Das ist kein Sprachfeature. Siehe auch:

http://msdn.microsoft.com/de-de/library/xwewhkd1(VS.80).aspx
http://msdn.microsoft.com/de-de/library/ewy2t5e0(VS.80).aspx