Ik ben bezig met een functie die alle tekens "a" veranderd in "b", tenzij b ingeloten is door "c".
(Doel: SQL query omschrijven, maar de delen tussen quotes met rust laten)
Nu heb ik dit als code:
Deze code werkt goed, maar bekijkt alleen de eerste set quotes.
Ik zie alleen niet waar en hoe ik iets moet doen om dit aan te passen, want als ik teksten aanpas, veranderd natuurlijk de positie, en als ik helemaal vooraan begin, dan blijft hij continu dezelfde 'set' aanpassen...
Ik gok iets van recursief, maar zie niet precies hoe en waar......
(Doel: SQL query omschrijven, maar de delen tussen quotes met rust laten)
Nu heb ik dit als code:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| Protected Function SafeReplace(ByVal Query As String, ByVal OldChar As String, ByVal NewChar As String, ByVal safe As Char) As String Dim OldCharPos As Integer ' We want to avoid doing any work, of course ;) If IsDBNull(Query) Then Return Nothing ' If the query has no length, there is no need to do anything If Query.Length = 0 Then Return Query ' If OldChar=NewChar , there is no need to do anything If OldChar = NewChar Then Return Query ' If the OldChar is not found, there is no need to do anything If InStr(Query, OldChar) = 0 Then Return Query ' If the 'safe' is not found, all can be safely translated If InStr(Query, safe) = 0 Then Return Query.Replace(OldChar, NewChar) ''''''''''''''''''''''''''''''''''''''''''''' ' Need this function to do some stuff recursive. Now ONLY analyses first ' Locate the position of the first oldchar Dim before As String Dim selected As String Dim after As String OldCharPos = InStr(Query, OldChar) ' It seems we do have to work on this one. Dim teller As Integer = 0 For pos As Integer = 0 To OldCharPos If Query.Chars(pos) = safe Then teller += 1 End If Next before = Left(Query, OldCharPos - 1) after = Right(Query, Query.Length - OldCharPos) If ((teller Mod 2) = 0) Then selected = NewChar Else selected = OldChar End If Return before & selected & after End Function |
Deze code werkt goed, maar bekijkt alleen de eerste set quotes.
Ik zie alleen niet waar en hoe ik iets moet doen om dit aan te passen, want als ik teksten aanpas, veranderd natuurlijk de positie, en als ik helemaal vooraan begin, dan blijft hij continu dezelfde 'set' aanpassen...
Ik gok iets van recursief, maar zie niet precies hoe en waar......
[ Voor 10% gewijzigd door Verwijderd op 30-06-2005 17:51 ]