dasgute
Goto Top

Liste von Feldwerten erstellen und kombinieren

Hallo,

habe eine HTML Datei (pdir.htm) die eine Tabelle mit vielen Zellwerten enthält. Dabei sollen die namen der eingabefelder ermittelt, aufgelistet werden.

...
<tr bgcolor=#d3d3d3><td>1.<td>&nbsp;<input class="inputc" size="40" name="17006" value="" maxlength=2047><td>2.<td>&nbsp;<input class="inputc" size="40" name="16942" value="" maxlength=2047>  
<tr bgcolor=#dcdcdc><td>3.<td>&nbsp;<input class="inputw" size="40" name="17134" value="" maxlength=2047><td>4.<td>&nbsp;<input class="inputw" size="40" name="17070" value="" maxlength=2047>  
<tr bgcolor=#d3d3d3><td>5.<td>&nbsp;<input class="inputc" size="40" name="17262" value="" maxlength=2047><td>6.<td>&nbsp;<input class="inputc" size="40" name="17198" value="" maxlength=2047>  
<tr bgcolor=#dcdcdc><td>7.<td>&nbsp;<input class="inputw" size="40" name="17390" value="" maxlength=2047><td>8.<td>&nbsp;<input class="inputw" size="40" name="17326" value="" maxlength=2047>  
...
Ausgabe soll eine Liste mit den Feldnamen von oben.
17006
16942
17134
17070
17262
17198
17390
17326
Nun sollen den Feldnamen diese Values zugeordnet werden.
Eintrag1
Eintrag2
Eintrag3
Eintrag4
Eintrag5
Eintrag6
Eintrag7
Eintrag8
Nun sollen den Feldnamen und Values zusammengefügt werden.
17006=Eintrag1
16942=Eintrag2
17134=Eintrag3
17070=Eintrag4
17262=Eintrag5
17198=Eintrag6
17390=Eintrag7
17326=Eintrag8
Nun soll das ganze in diese Ausgabe umgewandelt werden und so aussehen
...
<tr bgcolor=#d3d3d3><td>1.<td>&nbsp;<input class="inputc" size="40" name="17006" value="Eintrag1" maxlength=2047><td>2.<td>&nbsp;<input class="inputc" size="40" name="16942" value="Eintrag2" maxlength=2047>  
<tr bgcolor=#dcdcdc><td>3.<td>&nbsp;<input class="inputw" size="40" name="17134" value="Eintrag3" maxlength=2047><td>4.<td>&nbsp;<input class="inputw" size="40" name="17070" value="Eintrag4" maxlength=2047>  
<tr bgcolor=#d3d3d3><td>5.<td>&nbsp;<input class="inputc" size="40" name="17262" value="Eintrag5" maxlength=2047><td>6.<td>&nbsp;<input class="inputc" size="40" name="17198" value="Eintrag6" maxlength=2047>  
<tr bgcolor=#dcdcdc><td>7.<td>&nbsp;<input class="inputw" size="40" name="17390" value="Eintrag7" maxlength=2047><td>8.<td>&nbsp;<input class="inputw" size="40" name="17326" value="Eintrag8" maxlength=2047>  
...
in ShellScript habe ich zumindest eine Zellenliste mit diesem code bekommen (Ausgabe ...17006=0 u.s.w...).

cat pdir.htm |grep name|grep value|cut -d '"' -f6,14|sed s/\"/\ /|xargs -n1 echo|sed s/$/=0/

Kann man das ganze mit einer cmd datei lösen eventuell mit Findstr, Type? Ich benötige eine cmd-Datei oder vbs-Datei. Ich benötige das script auf einem Windows-Rechner

Vielen Dank für Hilfe und evtl Denkansätze

Content-Key: 182830

Url: https://administrator.de/contentid/182830

Printed on: April 23, 2024 at 13:04 o'clock

Member: bastla
bastla Mar 30, 2012 at 14:25:48 (UTC)
Goto Top
Hallo dasgute!

Sollte das wirklich so gemeint sein, dass "Eintrag1" sich aus dem konstanten Text "Eintrag" und der variablen Nummer lt
<td>1.<td>
ergeben soll, könnte das per VBS etwa so gehen:
Ein = "D:\pdir.htm"  
Aus = "D:\pdir_new.htm"  

Set fso = CreateObject("Scripting.FileSystemObject")  

Set rE = New RegExp
rE.Global = True
rE.Pattern = "<td>(\d)\.<td>&nbsp;<input class=""input(.)"" size=""40"" name=""(\d{5})"" value="""" maxlength=2047>"  

T = fso.OpenTextFile(Ein).ReadAll
fso.CreateTextFile(Aus).Write rE.Replace(T, "<td>$1.<td>&nbsp;<input class=""input$2"" size=""40"" name=""$3"" value=""Eintrag$1"" maxlength=2047>")  
Übrigens: "sed" gibt es auch für Windows ...
Falls das eher so gedacht wäre, dass tatsächlich eine Zwischendatei (in meinem Beispiel unten "Zuordnung.txt") mit den Feldnamen erstellt werden soll, die dann manuell mit den Einträgen ergänzt wird, dann etwa so:
'MakeList.vbs  
Ein = "D:\pdir.htm"  
Aus = "D:\Zuordnung.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  

Set rE = New RegExp
rE.Global = True
rE.Pattern = "<td>(\d)\.<td>&nbsp;<input class=""input(.)"" size=""40"" name=""(\d{5})"" value="""" maxlength=2047>" 'von oben übernommen; ließe sich vermutlich auch gefahrlos noch kürzen  

T = fso.OpenTextFile(Ein).ReadAll
Set A = fso.CreateTextFile(Aus)
Set Matches = rE.Execute(T)
For Each Match In Matches
    A.WriteLine Match.SubMatches(2) & "="  
Next
und
'ReplaceByList.vbs  
Ein = "D:\pdir.htm"  
Aus = "D:\pdir_new.htm"  
Liste = "Zuordnung.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
T = fso.OpenTextFile(Ein).ReadAll
L = Split(fso.OpenTextFile(Liste).ReadAll, vbCrLf)

For Each Zuordnung In L
    If InStr(Zuordnung, "=") > 0 Then  
        Feld = Split(Zuordnung, "=")(0)  
        Wert = Split(Zuordnung, "=")(1)  
        T = Replace(T, "name=""" & Feld & """ value=""""", "name=""" & Feld & """ value=""" & Wert & """")  
    End If
Next

fso.CreateTextFile(Aus).Write T

Noch als Hinweis zu beiden Ansätzen: Wenn die Originaldatei überschrieben werden soll, einfach nur jeweils anstelle von "CreateTextFile(Aus)" "CreateTextFile(Ein)" verwenden ...

Grüße
bastla