VimpMedlem sedan juli 20022 537 inlägg Hej,
Jag tänkte göra en funktion som byter ut flera strängar mot andra, d.v.s som en mer avancerad Replace()-funktion.
Jag får för tillfället följande felmeddelande:
Objektreferensen har inte angetts till en instans av ett objekt.
Klassen ser ut på följande sätt:
Namespace test
Public Class testing
Private Function ReplaceString(ByVal StringToReplace As String) As String
Dim tmpString As String = StringToReplace
tmpString = tmpString.Replace("0", "noll")
tmpString = tmpString.Replace("1", "ett")
tmpString = tmpString.Replace("2", "två")
tmpString = tmpString.Replace("3", "tre")
tmpString = tmpString.Replace("4", "fyra")
tmpString = tmpString.Replace("5", "fem")
tmpString = tmpString.Replace("6", "sex")
tmpString = tmpString.Replace("7", "sju")
tmpString = tmpString.Replace("8", "åtta")
tmpString = tmpString.Replace("9", "nio")
Return tmpString
End Function
Public Property Banan(ByVal strText As String) As String
Get
Return ReplaceString(Banan)
End Get
Set(ByVal Value As String)
strText = Value
End Set
End Property
End Class
End Namespace
Code-Behind-filen där jag skapar en instans av "testing" ser ut på följande sätt:
...
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim testClass As New testing()
Literal1.Text = testClass.Banan("1234567890")
End Sub
...
Felmeddelandet tyder på tatt det är tmpString = tmpString.Replace("0", "noll") det är fel på.
renholmMedlem sedan apr. 20012 266 inlägg Har inte så stor kolla på VB.NET men tyckte att din Propertie ser konstig ut, har för mig att man ska använda value objektet för att sätta värden. Dessutom tror jag inte properties kan ta argument utan det du använder ser ut att vara en funktion. Men som jag sa tidigare kan jag inte VB.NET något vidare. Däremot vet jag att frågan inte är någon ASP.NET specifik fråga, flyttas därför till .NET-forumet.
Engine^Medlem sedan dec. 20003 887 inlägg Ska du använda dig av properties måste du nog göra såhär
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim testClass As New testing()
testClass.Banan = "1234567890"
Literal1.Text = testClass.Banan
End Sub
Annars måste du skapa en metod eller en konstruktor som tar en sträng som argument.
VimpMedlem sedan juli 20022 537 inlägg Fungerar fortfarande inte :(
Får följande felmeddelande i VS.NET:
c:\inetpub\wwwroot\CyberZone\default.aspx.vb(25): Argument not specified for parameter 'strText' of 'Public Property Banan(strText As String) As String'.
På aspx-sidan är det fortfarande samma fel.
DinoMedlem sedan sep. 20011 914 inlägg Om jag kommer ihåg min vb.net rätt så skall det väl se ut så här?
private _Banan as string
Public Property Banan() As String
Get
Return _Banan
End Get
Set(ByVal Value As String)
_Banan = ReplaceString(Value)
End Set
End Property
VimpMedlem sedan juli 20022 537 inlägg Det händer ingenting nu.
Inget felmeddelande (YES! ;) ), men samtidigt kommer ingen text =(
Hur ska jag skicka med värdet där?
Ska jag lägga till t.ex. strText As String i Banan() ?
VimpMedlem sedan juli 20022 537 inlägg ÅÅhhh.. ni är ju underbara :e
Fungerar perfekt :e
Puss på er :f
:birp :birp :birp
VimpMedlem sedan juli 20022 537 inlägg Nu försöker jag göra om koden så att den läser in en XML-fil som innehåller alla strängar som ska bytas ut.
I XML-filen har jag <OldText> som innehåller den strängen som ska bytas ut och <NewText> som innehåller den nya strängen.
De ligger i sin tur i <TextToReplace>.
Jag vet dock ej hur jag ska göra för att sedan byta ut alla OldText mot NewText.
Är det någon som kan ge mig något att gå på?
DinoMedlem sedan sep. 20011 914 inlägg Får kolla på det sen, men kan du visa xml filen och hur du tar ut/in datan
VimpMedlem sedan juli 20022 537 inlägg Jag skickar med alla koder.
Jag har inte hunnit fixa allt som det ska vara så det ligger kanske kvar lite skitkoder.
Men jag är tacksam för att du tar dig tid och kollar igenom detta :)
replace.xml:
<?xml version="1.0" encoding="utf-8" ?>
<TextToReplace>
<Text>
<OldText>1</OldText>
<NewText>ett</NewText>
</Text>
<Text>
<OldText>2</OldText>
<NewText>två</NewText>
</Text>
<Text>
<OldText>3</OldText>
<NewText>tre</NewText>
</Text>
<Text>
<OldText>4</OldText>
<NewText>fyra</NewText>
</Text>
<Text>
<OldText>5</OldText>
<NewText>fem</NewText>
</Text>
</TextToReplace>
Test.vb
Imports System
Imports System.Web
Imports System.Web.UI
Namespace Common
Public Class Replace : Inherits Control
#Region " Functions "
Private Function ReadXML(ByVal Source As String) As String
Dim DS As New DataSet()
DS.ReadXml(_Source)
Dim i As Integer
Dim tmpA As String
Dim tmpB As String
Dim strXML As String
For i = 0 To DS.Tables("TextToReplace").Rows.Count()
tmpA = DS.Tables("TextToReplace").Columns("OldText")
tmpB = DS.Tables("TextToReplace").Columns("NewText")
Source = Source.Replace(tmpA, tmpB)
Next
Return Source
End Function
Private Function ReplaceString(ByVal StringToReplace As String) As String
Dim tmpString As String = StringToReplace
tmpString = tmpString.Replace("0", "noll")
tmpString = tmpString.Replace("1", "<a href=""http://www.cyberzone.se"" target=""_blank"">CyberZone aeger</a>")
tmpString = tmpString.Replace("2", "två")
tmpString = tmpString.Replace("3", "tre")
tmpString = tmpString.Replace("4", "fyra")
tmpString = tmpString.Replace("5", "fem")
tmpString = tmpString.Replace("6", "sex")
tmpString = tmpString.Replace("7", "sju")
tmpString = tmpString.Replace("8", "åtta")
tmpString = tmpString.Replace("9", "nio")
Return tmpString
End Function
#End Region
#Region " Properties "
Private _Replace As String
Public Property Text() As String
Get
Return _Replace
End Get
Set(ByVal Value As String)
'_Replace = ReplaceString(Value)
_Replace = ReplaceString(Value)
End Set
End Property
Private _Source As String
Public Property Source() As String
Get
Return _Source
End Get
Set(ByVal Value As String)
_Source = Value
End Set
End Property
#End Region
#Region " Output "
Protected Overrides Sub Render(ByVal Output As HtmlTextWriter)
Output.Write(_Replace)
End Sub
#End Region
End Class 'Replace
End Namespace 'Common
default.aspx
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="CyberZone.WebForm1"%>
<%@ Register TagPrefix="CyberZone" Namespace="CyberZone.Common" Assembly="CyberZone" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1</title>
<meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
<meta content="Visual Basic 7.0" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<CyberZone:Replace Text="String 123" runat="server" id="Replace1" />
</form>
</body>
</HTML>
VimpMedlem sedan juli 20022 537 inlägg Jag kan säga direkt att jag inte har hunnit fixa till loopen där den ska byta ut informationen i XML-filen..
//Edit
Innehållet i funktionen replacestring är bara temporärt.
Det ska inte användas när allt är klart.
DinoMedlem sedan sep. 20011 914 inlägg Om du bara skall byta ut OldText till NewText så borde väl modifierad version av ReadXML funka.
For i = 0 To DS.Tables("TextToReplace").Rows.Count()
tmpA = DS.Tables("TextToReplace").Columns("OldText")
tmpB = DS.Tables("TextToReplace").Columns("NewText")
[b]DS.Tables("TextToReplace").Columns("OldText") = tmpB[/b]
Source = Source.Replace(tmpA, tmpB)
Next
[b]DS.WriteXml(_Source)[/b]
VimpMedlem sedan juli 20022 537 inlägg I default.aspx har jag denna kod:
<CyberZone:Replace Text="String 123" runat="server" id="Replace1" />
I "Text" vill jag skicka in en sträng.
Sen ska jag ha en loop som kollar igenom XML-filen och om något i strängen finns som OldText i XML-filen ska det bytas ut mot NewText.
Sen ska jag skriva ut den modifierande texten.
Jag vill alltså inte skriva till XML-filen, utan endast läsa in värdena från den.
VimpMedlem sedan juli 20022 537 inlägg Nu har jag kommit lite längre..
Funderar på att använda XmlDataDocument() eller XmlTextReader() nu.
Jag skickar med koden för test.vb här:
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Xml
Imports System.Data
Namespace Common
Public Class Replace : Inherits Control
#Region " Properties "
Private _Replace As String
Public Property Text() As String
Get
Return _Replace
End Get
Set(ByVal Value As String)
'_Replace = ReadXML(_Source, Value)
_Replace = ReadXML2(_Source, Value)
End Set
End Property
Private _Source As String
Public Property Source() As String
Get
Return _Source
End Get
Set(ByVal Value As String)
_Source = Value
End Set
End Property
#End Region
#Region " Functions "
Private Function ReadXML(ByVal Source As String, ByVal Text As String) As String
Dim XMLDoc As New XmlDataDocument()
'Try
XMLDoc.DataSet.ReadXml(Source)
Dim i As Integer
Dim tmpA, tmpB As String
Dim strXML As String
For i = 0 To XMLDoc.DataSet.Tables("TextToReplace").Columns.Count - 1
tmpA = XMLDoc.DataSet.Tables(0).Columns(i).Caption
tmpB = XMLDoc.DataSet.Tables(0).Columns(i).Caption
Text = Text.Replace(tmpA, tmpB)
Next
'Catch
'Throw New Exception("Ett fel uppstod.")
'End Try
Return Text
End Function
Private Function ReadXML2(ByVal Source As String, ByVal Text As String) As String
Dim reader As XmlTextReader
Dim tmpA As Integer
Dim tmpB As Integer
reader = New XmlTextReader(Source)
While reader.Read
tmpA = reader.Value
reader.MoveToNextAttribute()
tmpB = reader.Value
Text = Text.Replace(tmpA, tmpB)
End While
Return Text
End Function
#End Region
#Region " Output "
Protected Overrides Sub Render(ByVal Output As HtmlTextWriter)
Output.Write(_Replace)
End Sub
#End Region
End Class 'Replace
End Namespace 'Common
Som ni ser har jag två olika funktioner där.
Jag tycker själv att readxml2 verkar stabilast. ;)
På default.aspx kör jag denna lilla snutt..
<CyberZone:Replace Text="String 123" Source="c:\inetpub\wwwroot\CyberZone\replace.xml" runat="server" />
Problemet nu är att det någonstans i koden blir fel :q
Får detta felmeddelande:
Sökvägen har inte ett giltigt format.
Den syftar på rad 64 i test.vb.
Rad 62: Dim tmpB As Integer
Rad 63:
Rad 64: reader = New XmlTextReader(Source)
Rad 65:
Rad 66: While reader.Read
Det verkar som sökvägen skickas in på ett felaktigt sätt.
Vore tacksam för ledtrådar som leder till att jag kan lösa detta!
//Mikael Söderström
DinoMedlem sedan sep. 20011 914 inlägg Koden är inte testad, men den borde funka tycker jag.
Public Class Replace : Inherits Control
Private _text, _source As String
Public Property Text() As String
Get
Return _text
End Get
Set(ByVal Value As String)
_text = ReplaceString(Value, Source)
End Set
End Property
Public Property Source() As String
Get
Return _source
End Get
Set(ByVal Value As String)
_source = Value
End Set
End Property
Function ReplaceString(ByVal TextString As String, ByVal DataSource As String) As String
Dim sOld As String()
Dim sNew As String()
Dim x As Integer = 0
Dim xdrData As New XmlTextReader(HttpContext.Current.Server.MapPath(DataSource))
While xdrData.Read()
If xdrData.NodeType = XmlNodeType.Element Then
Select Case xdrData.Name
Case "OldText"
sOld(x) = xdrData.ReadString
Case "NewText"
sNew(x) = xdrData.ReadString
x += 1
End Select
End If
End While
xdrData.Close()
For i As Integer = 0 To sNew.Length - 1
TextString = TextString.Replace(sOld(i), sNew(i))
Next
Return TextString
End Function
Protected Overrides Sub Render(ByVal Output As HtmlTextWriter)
Output.Write(Text)
End Sub
End Class