In Linkstruktur Sonderzeichen mit VB transformieren.
Die bestehende Linkstruktur an bestehende Linkkonventionen bezüglich Sonderzeichen anpassen.
Hallo zusammen.
In diesem Schritt sollen jetzt also die Links, die auf die im vorigen Schritt umbenannten Dateien verweisen, mit Hilfe der im vorigen Script erstellten Umwandlungstabelle von Sonderzeichen befreit werden.
Zu anderen Zwecken hatte ich schon alle Texte, die auf diese jetzt frisch umbenannten Übersetzungsdateien verweisen, in einem einzigen Dokument zusammengefaßt, das Wir jetzt hier gut verwenden können, um die Aktion durchzuführen.
Festzuhalten ist, das Wir zwei verschiedene Arten von Text haben.
Einmal Text, in dem Sonderzeichen erlaubt sind. Das sind normaler Text und der Linktext, also der Text, auf den geklickt wird.
Nicht erlaubt sind Sonderzeichen in der Ordnerstruktur des Links sowie in der angelinkten Datei.
Also muß das Script nur die Bereiche bearbeiten, die den Link enthalten.
Desweiteren sollte das Script einen Arrey bereitstellen, in dem ich die nicht mit der Umwandlungstabelle erstellten Modifizierungen der Dateinamen bekannt machen kann nach folgendem Schema: Dateiname-mit-Sonderzeichen = Neuer-Dateiname-Manuell-erstellt, Dateiname2-mit-Sonderzeichen = Neuer-Dateiname2-Manuell-erstellt usw.
Dieses Arrey soll also alle Dateinamen enthalten, die von mir wegen der Dopplungsgefahr manuell umbenannt wurden.
Das Script soll also den Teil des Links(wenn ein Sonderzeichen enthalten ist), der die angelinkte Datei anspricht(im unteren Beispiel DateinamePerd%E3o), zuerst in dem Arrey mit dem Dateinamen links des = vergleichen. Wenn Treffer, mit dem rechten Teil des = ersetzen. Wenn kein Treffer, mit Hilfe der Umwandlungstabelle ersetzen.
Zuerst muß aber der linke Teil vom = im Arrey mit der schon entwickelten Sonderfunktion Konvert in html Sonderzeichendarstellung umgewandelt werden, damit der Vergleich funktionieren kann.
Wegen der geringen Anzahl der Ausnahmen kann ich aber die Dateinamen links des = im Arrey auch manuell im html Format angeben.
Falls im Pfad, also nicht in der angelinkten Datei, ein Sonderzeichen gefunden und ersetzt wird, soll dieser in eine Protokolldatei geschrieben werden, damit ich ihn manuell in meiner Ordnerstruktur anpassen kann.
Struktur der Links:
<a title="Titel"href="Pfad/DateinamePerd%E3o.php">Linktext</a>
Also sollen alle Operationen zwischen <a und <a/> durchgeführt werden.
Den Start stelle ich mir so vor, das, wie im vorigen Script, ich die Datei mit dem Text auf das Script ziehe, was ja viel komvortabler als der Aufruf über die Kommandozeile ist.
Wenn ich hier wieder fachmänische Hilfe finde, bringt mich das den letzten großen Schritt bezüglich der Sonderzeichenproblematik weiter.
Dank und Gruß
Fraenky
Hallo zusammen.
In diesem Schritt sollen jetzt also die Links, die auf die im vorigen Schritt umbenannten Dateien verweisen, mit Hilfe der im vorigen Script erstellten Umwandlungstabelle von Sonderzeichen befreit werden.
Zu anderen Zwecken hatte ich schon alle Texte, die auf diese jetzt frisch umbenannten Übersetzungsdateien verweisen, in einem einzigen Dokument zusammengefaßt, das Wir jetzt hier gut verwenden können, um die Aktion durchzuführen.
Festzuhalten ist, das Wir zwei verschiedene Arten von Text haben.
Einmal Text, in dem Sonderzeichen erlaubt sind. Das sind normaler Text und der Linktext, also der Text, auf den geklickt wird.
Nicht erlaubt sind Sonderzeichen in der Ordnerstruktur des Links sowie in der angelinkten Datei.
Also muß das Script nur die Bereiche bearbeiten, die den Link enthalten.
Desweiteren sollte das Script einen Arrey bereitstellen, in dem ich die nicht mit der Umwandlungstabelle erstellten Modifizierungen der Dateinamen bekannt machen kann nach folgendem Schema: Dateiname-mit-Sonderzeichen = Neuer-Dateiname-Manuell-erstellt, Dateiname2-mit-Sonderzeichen = Neuer-Dateiname2-Manuell-erstellt usw.
Dieses Arrey soll also alle Dateinamen enthalten, die von mir wegen der Dopplungsgefahr manuell umbenannt wurden.
Das Script soll also den Teil des Links(wenn ein Sonderzeichen enthalten ist), der die angelinkte Datei anspricht(im unteren Beispiel DateinamePerd%E3o), zuerst in dem Arrey mit dem Dateinamen links des = vergleichen. Wenn Treffer, mit dem rechten Teil des = ersetzen. Wenn kein Treffer, mit Hilfe der Umwandlungstabelle ersetzen.
Zuerst muß aber der linke Teil vom = im Arrey mit der schon entwickelten Sonderfunktion Konvert in html Sonderzeichendarstellung umgewandelt werden, damit der Vergleich funktionieren kann.
Wegen der geringen Anzahl der Ausnahmen kann ich aber die Dateinamen links des = im Arrey auch manuell im html Format angeben.
Falls im Pfad, also nicht in der angelinkten Datei, ein Sonderzeichen gefunden und ersetzt wird, soll dieser in eine Protokolldatei geschrieben werden, damit ich ihn manuell in meiner Ordnerstruktur anpassen kann.
Struktur der Links:
<a title="Titel"href="Pfad/DateinamePerd%E3o.php">Linktext</a>
Also sollen alle Operationen zwischen <a und <a/> durchgeführt werden.
Den Start stelle ich mir so vor, das, wie im vorigen Script, ich die Datei mit dem Text auf das Script ziehe, was ja viel komvortabler als der Aufruf über die Kommandozeile ist.
Wenn ich hier wieder fachmänische Hilfe finde, bringt mich das den letzten großen Schritt bezüglich der Sonderzeichenproblematik weiter.
Dank und Gruß
Fraenky
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 73217
Url: https://administrator.de/forum/in-linkstruktur-sonderzeichen-mit-vb-transformieren-73217.html
Ausgedruckt am: 22.12.2024 um 21:12 Uhr
11 Kommentare
Neuester Kommentar
Hallo Fraenky!
Das trifft sich gut - habe kürzlich eine Baustelle abgeschlossen ...
Noch zwei Fragen:
Grüße
bastla
Das trifft sich gut - habe kürzlich eine Baustelle abgeschlossen ...
1. Die Überprüfung des Pfades auf Sonderzeichen kann wegfallen.
Hier hätte ich eine manuelle Ersetzung vorweg vorgeschlagen (sowohl in den Ordnernamen des Dateisystems als auch im HTML-Dokument - in letzterem einfach per "Suchen/Ersetzen", da die Angabe des gesamten Pfades (alt und neu) - und damit eines langen Suchbegriffes - dafür sorgen sollte, dass tatsächlich nur der betreffende Pfad verändert wird und keine unerwünschten Ersetzungen in Dateinamen oder Texten stattfinden).2. Das Array zur Bekanntmachung der manuell umbenannten Dateinamen kann notfalls auch wegfallen.
Schau'n mer mal ...Noch zwei Fragen:
... in einem einzigen Dokument ...
Ist dieses Dokument als Linkliste strukturiert (ein Link je Zeile) oder kann zumindest davon ausgegangen werden, dass eine zeilenweise Bearbeitung möglich ist (da keine - im Quellcode - zeilenübergreifenden Links vorkommen)?Also sollen alle Operationen zwischen <a und <a/> durchgeführt werden
Ich hätte eigentlich angenommen, dass nur die Dateinamen (oder ev -pfade) betroffen wären und daher nur den Bereich zwischen href=" und dem nächsten Anführungszeichen als relevant erachtet - oder sollten doch auch Titel und Linktext geändert werden?Grüße
bastla
Hallo Fraenky!
Für den folgenden Script-Entwurf werden die "SonderzeichenErsetzung.txt" aus dem vorherigen Schritt benötigt sowie eine "Ausnahmen.txt" zur Zuordnung der manuell zu ersetzenden Dateinamen nach folgendem Schema berücksichtigt:
Zwischen dem jeweiligen Dateinamen und dem "=" darf kein Leerzeichen stehen. Die Schreibweise des alten Dateinamens muss dabei der bereits im Dokument verwendeten entsprechen (es erfolgt vor der Ersetzung keine Konvertierung) und es wird ein davor stehender Pfad (mit "/" getrennt) sowie die Angabe des Dateityps (zB ".php") vorausgesetzt.
Falls keine oder eine leere "Ausnahmen.txt" vorgefunden wird, ist zu entscheiden, ob dennoch die Konvertierung (dann eben ausnahmslos aller Dateinamen und Pfade) erfolgen oder das Script abgebrochen werden soll.
Da auch in den Pfaden enthaltene Sonderzeichen umgewandelt würden, sollten diese bereits im Vorhinein per Suchen/Ersetzen behandelt worden sein.
Von der bearbeiteten Datei wird eine Sicherungskopie (mit der zusätzlichen Endung ".bak") erstellt.
Grüße
bastla
Für den folgenden Script-Entwurf werden die "SonderzeichenErsetzung.txt" aus dem vorherigen Schritt benötigt sowie eine "Ausnahmen.txt" zur Zuordnung der manuell zu ersetzenden Dateinamen nach folgendem Schema berücksichtigt:
alter Dateiname=neuer Dateiname
Falls keine oder eine leere "Ausnahmen.txt" vorgefunden wird, ist zu entscheiden, ob dennoch die Konvertierung (dann eben ausnahmslos aller Dateinamen und Pfade) erfolgen oder das Script abgebrochen werden soll.
Da auch in den Pfaden enthaltene Sonderzeichen umgewandelt würden, sollten diese bereits im Vorhinein per Suchen/Ersetzen behandelt worden sein.
Const sSonder = "C:\Skripts\SonderzeichenErsetzung.txt"
Const sAusnahmen = "C:\Skripts\Ausnahmen.txt"
Const sFileExtOld = ".bak"
Const sStart = "href=""" 'linke Begrenzung der zu konvertierenden Sequenz
Const sEnd = """" 'rechte Begrenzung der zu konvertierenden Sequenz
lLenStart = Len(sStart)
If WScript.Arguments.Count = 0 Then
WScript.Echo "Datei mit umzubenennenden Links als Parameter uebergeben!"
WScript.Quit(1)
End If
Set fso = CreateObject("Scripting.FileSystemObject")
sFile = WScript.Arguments(0)
If Not fso.FileExists(sFile) Then
WScript.Echo sFile & " ist kein gueltiger Dateiname!"
WScript.Quit(1)
End If
If Not fso.FileExists(sSonder) Then
WScript.Echo "Sonderzeichendaten " & sSonder & " nicht gefunden."
WScript.Quit(1)
End If
Set oSonder = fso.OpenTextFile(sSonder, 1)
If Not oSonder.AtEndOfStream Then
aSonder = Split(oSonder.ReadAll, vbCrLF)
Else
oSonder.Close
WScript.Echo "Sonderzeichendatei " & sSonder & " enthält keine Daten!"
WScript.Quit(1)
End If
oSonder.Close
If Not fso.FileExists(sAusnahmen) Then
R = MsgBox("Ausnahmendatei " & sAusnahmen & " nicht gefunden!" & vbCrLF & vbCrLF & _
"Sollen alle Links (ohne Ausnahmen) umgewandelt werden?",vbYesNo)
If R <> vbYes Then WScript.Quit(1)
bAusnahmen = False
Else
Set oAusnahmen = fso.OpenTextFile(sAusnahmen, 1)
If Not oAusnahmen.AtEndOfStream Then
aAusnahmen = Split(oAusnahmen.ReadAll, vbCrLF)
bAusnahmen = True
Else
R = MsgBox("Ausnahmendatei " & sAusnahmen & " enthält keine Daten!" & vbCrLF & vbCrLF & _
"Sollen alle Links (ohne Ausnahmen) umgewandelt werden?",vbYesNo)
If R <> vbYes Then WScript.Quit(1)
bAusnahmen = False
End If
oAusnahmen.Close
End If
sFileBak = sFile & sFileExtOld
If fso.FileExists(sFileBak) Then fso.DeleteFile(sFileBak)
Set oFile = fso.GetFile(sFile)
oFile.Name = sFileBak
sText = oFile.OpenAsTextStream(1).ReadAll
Set oFile = Nothing
Set oFileNew = fso.OpenTextFile(sFile, 2, True)
bDone = False
lEnd = 0
lPos2Write = 1
Do
lStart = InStr(lEnd + 1, sText, sStart, vBTextCompare)
If lStart > 0 Then
lStart = lStart + lLenStart
oFileNew.Write Mid(sText, lPos2Write, lStart - lPos2Write)
lPos2Write = lStart
lEnd = InStr(lStart, sText, sEnd, vBTextCompare)
If lEnd > 0 Then
sLinkOld = Mid(sText, lStart, lEnd - lStart)
sLinkNew = ReplaceSpecialChars(sLinkOld, bAusnahmen)
oFileNew.Write sLinkNew
lPos2Write = lEnd
Else
bDone = True
End If
Else
bDone = True
End If
Loop Until bDone
oFileNew.Write Mid(sText, lPos2Write)
oFileNew.Close
Function ReplaceSpecialChars(sOld, bAus)
sTemp = sOld
If bAus Then
For Each sLine In aAusnahmen
aAus = Split(sLine, "=")
If InStr(sOld, "/" & aAus(0)) <> 0 Then
sTemp = Replace(sOld, "/" & aAus(0), "/" & aAus(1))
Exit For
End If
Next
End If
If sTemp = sOld Then
For Each sLine In aSonder
aChars = Split(sLine, ",")
For i = 1 To UBound(aChars)
sTemp = Replace(sTemp, aChars(i), aChars(0))
Next
Next
End If
ReplaceSpecialChars = sTemp
End Function
Grüße
bastla
@bastla
Es muss aber wirklich nicht sein, dass Du um diese Zeit noch am Skripten bist.
Oder am Kommentare verfassen in dubiosen Foren....
Mach ich ja auch nicht.
Morgen ist auch noch ein Tag..
Grüße
Biber
Es muss aber wirklich nicht sein, dass Du um diese Zeit noch am Skripten bist.
Oder am Kommentare verfassen in dubiosen Foren....
Mach ich ja auch nicht.
Morgen ist auch noch ein Tag..
Grüße
Biber
@Biber
Jedenfalls schaut's so aus, als müssten wir beide uns wenigstens nicht um Schlafzimmerschranken kümmern ...
Grüße und guten Morgen
bastla
Oder am Kommentare verfassen in dubiosen Foren....
Woher weißt Du von den dubiosen Foren?... um diese Zeit noch am Skripten bist.
Mach ich ja auch nicht.
Nee, is klar, bei Dir ist's ja auch eine ganz andere Zeit - und vermutlich hast Du auch nur gebatcht ... Mach ich ja auch nicht.
Jedenfalls schaut's so aus, als müssten wir beide uns wenigstens nicht um Schlafzimmerschranken kümmern ...
Grüße und guten Morgen
bastla
Hallo Fraenky!
Entweder entfernst Du die in Deiner "Ausnahmen.txt" (vermutlich am Ende) befindliche(n) Leerzeile(n), oder (besser: und) Du änderst den Teil
auf
Grüße
bastla
Entweder entfernst Du die in Deiner "Ausnahmen.txt" (vermutlich am Ende) befindliche(n) Leerzeile(n), oder (besser: und) Du änderst den Teil
If bAus Then
For Each sLine In aAusnahmen
aAus = Split(sLine, "=")
If InStr(sOld, "/" & aAus(0)) <> 0 Then
sTemp = Replace(sOld, "/" & aAus(0), "/" & aAus(1))
Exit For
End If
Next
End If
If bAus Then
For Each sLine In aAusnahmen
If sLine <> "" Then
aAus = Split(sLine, "=")
If InStr(sOld, "/" & aAus(0)) <> 0 Then
sTemp = Replace(sOld, "/" & aAus(0), "/" & aAus(1))
Exit For
End If
End If
Next
End If
Grüße
bastla