Avatar billede SommerFyr Seniormester
01. august 2019 - 12:52 Der er 7 kommentarer og
1 løsning

Templates genrator

Hej Jeg skal bruge en html genrator som man brugt i sin tid til clasic asp

Den skal hente en fil og finde alle felter med {feltnavn} og kun bruge dem som er i en anden list og slette dem der ikke bliver brugt..

er der en som har en de vil del kode med mig eller en der har et bud på hvordan man kan lave den ?
Avatar billede Slettet bruger
01. august 2019 - 13:12 #1
ASP er 20 år gammelt og udløbet..
Avatar billede SommerFyr Seniormester
01. august 2019 - 15:31 #2
Ja jeg men jeg står at skulle hente et designe via en fil og rette det til på side så kender ikke en beder løsning pt.. så hvis du har et bud på mit spørgsmål vil jeg blive glad for et svar eller en løsning..
Avatar billede arne_v Ekspert
01. august 2019 - 18:54 #3
Det er meget uklart for mig hvad du leder efter.

Henvisningen til ASP og beskrivelsen matcher ikke i min optik.

Men her er "noget":


Imports System
Imports System.Collections.Generic
Imports System.Text.RegularExpressions

Namespace E
    Public Class Program
        Public Shared Function Replace(input As String, replacements As Dictionary(Of String, String)) As String
            Dim res As String = input
            Dim re As New Regex("{(\w+)}")
            For Each m As Match In re.Matches(input)
                Dim id As String = m.Groups(1).Value
                res = res.Replace("{" & id & "}", If(replacements.ContainsKey(id), replacements(id), ""))
            Next
            Return res
        End Function
        Public Shared Sub Main(args As String())
            Dim input As String = "A: {A} B: {B} C: {C} D: {D}"
            Dim replacements As New Dictionary(Of String, String)()
            replacements.Add("A", "This is A")
            replacements.Add("C", "This is C")
            Dim output As String = Replace(input, replacements)
            Console.WriteLine(input)
            Console.WriteLine(output)
            Console.ReadKey()
        End Sub
    End Class
End Namespace
Avatar billede SommerFyr Seniormester
01. august 2019 - 19:34 #4
Hej Arne

Ider er at man henter alle variabler ind fra en fil hvor den skal skifte alle {felt} ind og hvis de så bliver sat via skal de skifte ud ellers skal de forsvinde fra side.. .

eks
<html>
    <head>
        <title>{pagetitel}</title>
    </head>
    <body>
<h1>Velkommne {useip}<h1> {pagedata}
    </body>
</html>

bliver til
<html>
    <head>
        <title>Min side</title>
    </head>
    <body>
<h1>Velkommne 127.0.0.1<h1>
    </body>
</html>

fordi jeg har sat {pagetitel} og {useip} men har ikke sat {pagedata}

håber det giver mening ?
Avatar billede arne_v Ekspert
01. august 2019 - 20:08 #5
Min kode med:

replacements.Add("pagetitel", "Min side")
replacements.Add("useip", "127.0.0.1")

vil producere det output.

Men man kan naturligvis lave kdoe der laeser de variable fra fil.
Avatar billede arne_v Ekspert
01. august 2019 - 20:22 #6

Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Text.RegularExpressions

Namespace E
    Public Class Program
        Public Shared Function Replace(input As String, replacements As Dictionary(Of String, String)) As String
            Dim res As String = input
            Dim re As New Regex("{(\w+)}")
            For Each m As Match In re.Matches(input)
                Dim id As String = m.Groups(1).Value
                res = res.Replace("{" & id & "}", If(replacements.ContainsKey(id), replacements(id), ""))
            Next
            Return res
        End Function
        Public Shared Sub Main(args As String())
            Dim input As String
            Using sr As New StreamReader("input.html")
                input = sr.ReadToEnd()
            End Using
            Dim replacements As New Dictionary(Of String, String)()
            Using sr As New StreamReader("repl.properties")
                Dim line As String
                line = sr.ReadLine()
                While line IsNot Nothing
                    Dim parts As String() = line.Split("="C)
                    replacements.Add(parts(0).Trim(), parts(1).Trim())
                    line = sr.ReadLine()
                End While
            End Using
            Dim output As String = Replace(input, replacements)
            Console.WriteLine(output)
            Console.ReadKey()
        End Sub
    End Class
End Namespace


input.html:


<html>
    <head>
        <title>{pagetitel}</title>
    </head>
    <body>
<h1>Velkommne {useip}<h1> {pagedata}
    </body>
</html>


repl.properties:


pagetitel = Min side
useip = 127.0.0.1
Avatar billede SommerFyr Seniormester
01. august 2019 - 22:01 #7
Hej Arne

Jeg har ud fra dit exp prøve men det driller mig lidt her for falde rabet..

    Public Class Template

        Private filedata As String
        Private outputdata As String
        Private FileAccess As New List(Of String)
        Public Feltlist As New Dictionary(Of String, String)

        Sub New(ByVal TemplateFile As String)
            filedata = File.ReadAllText(TemplateFile, Encoding.UTF8).ToString()
            outputdata = filedata
            Dim re As New Regex("\s+((href)|(src))\s*=\s*['""]\s*([^'""]+)\s*['""]", RegexOptions.IgnoreCase)
            For Each m As Match In re.Matches(filedata)
                FileAccess.Add(m.Groups(4).Value)
            Next

            Dim refelt As New Regex("{(\w+)}")
            For Each m As Match In refelt.Matches(filedata)
                Dim id As String = m.Groups(1).Value
                outputdata = outputdata.Replace("{" & id & "}", If(Feltlist.ContainsKey(id), Feltlist(id), ""))
            Next


        End Sub

        Public Function isAccess(ByVal AbsolutePath As String) As Boolean
            If Not FileAccess.Contains(AbsolutePath.ToString) And Not FileAccess.Contains(Mid(AbsolutePath.ToString, 2)) Then
                Return False
            Else
                Return True
            End If
        End Function

        Public Sub Properties(ByVal felt As String, ByVal Value As String)
            Feltlist.Add(felt, Value)
        End Sub

        Public Function Readtemplate()


            Return outputdata
        End Function

    End Class

Jeg kan se der er to post men virker ikke om om den udskriver det til output men den slette fint.
Avatar billede SommerFyr Seniormester
01. august 2019 - 22:38 #8
ups min fejl !!!

    Public Class Template

        Private filedata As String
        Private outputdata As String
        Private FileAccess As New List(Of String)
        Private Feltlist As New Dictionary(Of String, String)

        Sub New(ByVal TemplateFile As String)
            filedata = File.ReadAllText(TemplateFile, Encoding.UTF8).ToString()
            outputdata = filedata
            Dim re As New Regex("\s+((href)|(src))\s*=\s*['""]\s*([^'""]+)\s*['""]", RegexOptions.IgnoreCase)
            For Each m As Match In re.Matches(filedata)
                FileAccess.Add(m.Groups(4).Value)
            Next

        End Sub

        Public Function isAccess(ByVal AbsolutePath As String) As Boolean
            If Not FileAccess.Contains(AbsolutePath.ToString) And Not FileAccess.Contains(Mid(AbsolutePath.ToString, 2)) Then
                Return False
            Else
                Return True
            End If
        End Function

        Public Function testfelt(ByVal feltnavn As String) As Boolean
            Return Feltlist.ContainsKey(feltnavn)
        End Function

        Public Sub Properties(ByVal felt As String, ByVal Value As String)
            Feltlist.Add(felt, Value)
        End Sub

        Public Function Readtemplate()

            Dim refelt As New Regex("{(\w+)}")
            For Each m As Match In refelt.Matches(filedata)
                Dim id As String = m.Groups(1).Value
                outputdata = outputdata.Replace("{" & id & "}", IIf(Feltlist.ContainsKey(id), Feltlist(id), ""))
            Next

            Return outputdata
        End Function

    End Class

glemte at jeg ikke kun føste efter felt før de var oprette.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester