Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Interne Linkliste mit VBS auf Integrität überprüfen.

Frage Entwicklung VB for Applications

Mitglied: Fraenky

Fraenky (Level 1) - Jetzt verbinden

28.08.2007, aktualisiert 24.09.2007, 10708 Aufrufe, 55 Kommentare

VBS soll Interne Linkliste verifizieren, also ob für alle Links Dateien vorhanden sind und ob für alle Dateien im Arbeitsordner Verlinkungen bestehen und ggf die nötigen Anderungen durchführen und auf Nachfrage die Aufteilung der Liste vornehmen

Hallo. Ich habe hier einen Ablaufplan entwickelt, aber leider wenig Kenntnisse in VBS.
Kann mir jemand weiterhelfen?

Ablaufplan:

Arbeitsordner abfragen und Pfad aus LinkListe ermitteln.

Dateien im Arbeitsordner ermitteln.

Überprüfen, ob alle Dateinamen nur Buchstaben( inkl. Sonderzeichen !) Zahlen und "_" enthalten, ggf ändern.
Änderungen in Protokolldatei ProtokollNameDatModi eintragen.

Linknamen aus LinkListe ermitteln

Alle Leerzeichen entfernen und mit "_ " verbinden / dddd_gggg_2

Vergleiche beide Datensätze.

Wenn Datei fehlt, nimm modifizierten Linknamen dddd_gggg_2 und speichere im Arbeitsordner mit Endung .php als leere Datei ab.
Erstellung in ProtokollNameDatNew abspeichern.

Wenn Link fehlt, nimm Dateinamen, ersetze _ mit " " und entferne .php.
Erstelle Link unter Verwendung des Pfades aus Linkliste, füge Linknamen an der
alphabetischen Position ein.


Damit ist die Übereinstimmung von Links mit Dateien sichergestellt.


Abfrage Linkliste aufteilen?

Nein = Ende

Ja = Anzahl der Dateien pro Ordner mit Abfrage ermitteln und nach Schema:
Die ersten x Dateien in den ersten Ordner, die zweiten x Dat in den zweiten usw.

Abfrage: Ordner fortlaufend Nummerieren oder Namen aus ListeNamenOrdner einlesen?

Ja = fortlaufende Nummer Nein = Namen einlesen



Abfrage: Dateien fortlaufend Nummerieren oder Namen aus ListeNamenLinks einlesen?

Ja = fortlaufende Nummer Nein = Namen einlesen

In beiden Fällen Datei anlegen mit Endung .php und den Link in die Datei reinschreiben, so das sonst nichts in der Datei steht, also kein Header, body usw.

Also liegt im Ordner "1" die Datei 1.php mit dem ersten Link der Liste als Inhalt.

Anschließend den Link zu der Datei 1.php in Protokolldatei = ProtokollNewNameLinklist reinschreiben

Istzustand: Arbeitsordner/1/Test.php
Link in ProtokollNewNameLinklist: 1/Test.php

Oder hat jemand eine andere Idee, wie man die Aufgabenstellung lösen kann?
Grüße
Fränky
55 Antworten
Mitglied: Fraenky
02.09.2007 um 17:27 Uhr
Hallo Leute.
Das Echo ist ja überwältigend.
Nach dem Motto: Mach´s dir selber, Sam.
OK, OK, das will ich dann hier auch mit meiner 8 tägigen Erfahrung in VBS probieren, brauche aber Korrektur und Leitung.
Ausgehend von der Überlegung, wie man ein Script aufbauen kann, allso von konkreten zum ganzen oder vom ganzen zum konkreten, entscheide ich mich für meinen Ablaufplan, also vom ganzen zum konkreten.
Hiervonausgehend werde ich versuchen, die Aktionen immer konkreter werden zu lassen, bis sie auch das VBS versteht und mein Computer die gewünschten Aktionen durchführt.
Nochmal zur Verdeutlichung: Alle Links meiner internen Linkliste verlinken auf Dateien im selben Arbeitsordner.

Zuerstmal ein paar Variablen mit Defaultwerten definieren:
01.
Arbeitsordner = "C:\skript\" 'Arbeitsordner 
02.
'sPath = auch Arbeitsordner 
03.
'Also einmal als Default wert in der Variablen definiert 
04.
'einmal ber Explorerfenster ausgew„hlt 
05.
VerlinkteDateien = "C:\skript\test\VerlinkteDateien.txt" 
06.
 
07.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
08.
Set fso = CreateObject("Scripting.FileSystemObject") 
09.
If WScript.Arguments.Count > 0 Then 
10.
	sArg = WScript.Arguments(0) 
11.
	If fso.FileExists(sArg) Then 'Aufruf mit šbergabe einer Datei 
12.
		sPath = fso.GetFile(sArg).Path 
13.
		sPath = Left(sPath, InStrRev(sPath, "\") - 1) 
14.
	Else 'oder ev eines Ordners 
15.
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path 
16.
	End If 
17.
End If 
18.
If sPath = "" Then 'Kein (gltiger) Pfad bergeben, daher Dialog 
19.
	Set oFolder = CreateObject("Shell.Application") _ 
20.
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17) 
21.
	If TypeName(oFolder) = "Nothing" Then 
22.
		sPath = Arbeitsordner 
23.
	Else 
24.
		sPath = oFolder.Self.Path 
25.
	End If 
26.
End If 
27.
'WScript.Echo sPath 
28.
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen 
29.
'WScript.Echo Folder 
30.
Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Verbindung 
31.
'zur geöffneten VerlinkteDateien.txt herrgestellt. 
32.
For Each File in Folder.Files               'Hier für jede Datei in Arbeitsordner  
33.
	oVerlinkteDateien.WriteLine File.Name    ' der Name in neuer Zeile geschrieben. 
34.
Next 
35.
oVerlinkteDateien.Close                     '  Der Zugriff auf Datei wird beendet/ gespeichert 
36.
 
Dank an bastla, der meine erste Version verbesserte.

So, bis hierhin haben Wir also schon mal einen Standartarbeitsordner C:\skript\test\" und einen variablen Arbeitsordner, der über Explorer eingegeben wird und über sPath ansprechbar ist.
Jetzt brauchen wir die Dateinamen der verlinkten Dateien in dem Arbeitsordner, die in der Datei VerlinkteDateien.txt gespeichert werden sollen.
Nach erfassen aller im Arbeitsordner gespeicherten Dateien in VerlinkteDateien.txt sollen alle "_" unterstriche entfernt und mit Blank " " ersetzt werden, ebenso die Dateierweiterung entfernen.
Alle Dateien enden mit .php
Name_Zwei_21.php wird Name Zwei 21
Diese Datei vergleichen Wir später mit den Linknamen.
Am besten währe an dieser Stelle auch einen FehlerCheck, ob also kein Name versehentlich falsch geschrieben wurde, ob also ein Komma oder Bindestrich o.ä. sich eingeschlichen hat.
So. dies ist also der nächste Aufgabenschritt.
Konstruktive Hinnweise oder Lösungen herzlich willkommen
Bis die Tage
Fränky

Edit 04.09.07
Hallo bastla.

In diesem zugegebenermaßen seltenen Fall: Dateiname.txt.php
01.
sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind).
würde nach der Bearbeitung doch "Dateiname" überbleiben oder?, also würde als Beschreibung eher gelten:
Alles links vom ersten "." wird genommen.Oder?

Gibt es überhaupt die Möglichkeit, wie unter Dos, die Parameter und Syntax der einzelnen Befehle der einzelnen Dienste abzufragen?

Hier noch der aktuelle Stand:
01.
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind 
02.
'sPath = auch Arbeitsordner 
03.
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt" 
04.
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt" 
05.
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt" 
06.
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt"'Hier kommt noch nix an 
07.
 
08.
Set fso = CreateObject("Scripting.FileSystemObject") 
09.
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True) 
10.
Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
11.
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen 
12.
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben 
13.
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen 
14.
Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Verbindung 
15.
'zur geöffneten VerlinkteDateien.txt herrgestellt. 
16.
 
17.
 
18.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
19.
Const adVarChar = 200'Datenbankfelder 
20.
Const MaxCharacters = 255 
21.
Const adFldIsNullable = 32 
22.
 
23.
DataList.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren 
24.
DataList.Fields.Append "Text", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren 
25.
DataList.Open 
26.
 
27.
 
28.
 
29.
lInCounter = 0 
30.
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende 
31.
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen 
32.
	lInCounter = lIncounter + 1 
33.
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile: 
34.
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen) 
35.
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen) 
36.
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen) 
37.
 
38.
		'Zerlegung des 3. Teiles: 
39.
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text 
40.
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """") 
41.
		Else 
42.
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<" 
43.
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">" 
44.
			If aZeile(1) <> "" Or sText <> "" Then 
45.
				DataList.AddNew 'neuen Datensatz erstellen 
46.
				DataList("URL") = aZeile(1) 'Feld "URL" befüllen 
47.
				DataList("Text") = sText    'Feld "Text" befüllen  
48.
				DataList.Update '...  und Datensatz eintragen  
49.
			Else 
50.
				'Eintrag in das Protokoll: 
51.
					'Alle Teile zusammenfassen, 
52.
					'dabei die entfernten Anführungszeichen wieder einfügen und 
53.
					'Zeile in Protokolldatei schreiben 
54.
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """") 
55.
			End If 
56.
		End If 
57.
	Else 
58.
		'anderer Zeilenaufbau - wäre näher zu untersuchen 
59.
		'zumindest Protokolleintrag erstellen 
60.
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """") 
61.
	End If 
62.
Loop 
63.
DataList.MoveFirst 'beim ersten Datensatz beginnen ... 
64.
 
65.
			oLinkNamen.WriteLine  
66.
			DataList.Fields.Item("Text") 
67.
			DataList.MoveNext 
68.
			oLinkNamen.Close 
69.
 
70.
'Hier sollte doch in Datei die Linknamen geschrieben werden. Tut sich aber nix. 
71.
'Und die untere Abfrage findet nicht mehr statt. 
72.
 
73.
If WScript.Arguments.Count > 0 Then 
74.
	sArg = WScript.Arguments(0) 
75.
	If fso.FileExists(sArg) Then 'Aufruf mit šbergabe einer Datei 
76.
		sPath = fso.GetFile(sArg).Path 
77.
		sPath = Left(sPath, InStrRev(sPath, "\") - 1) 
78.
	Else 'oder ev eines Ordners 
79.
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path 
80.
	End If 
81.
End If 
82.
If sPath = "" Then 'Kein (gltiger) Pfad bergeben, daher Dialog 
83.
	Set oFolder = CreateObject("Shell.Application") _ 
84.
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17) 
85.
	If TypeName(oFolder) = "Nothing" Then 
86.
		sPath = Arbeitsordner 
87.
	Else 
88.
		sPath = oFolder.Self.Path 
89.
	End If 
90.
End If 
91.
For Each File in Folder.Files'Hier für jede Datei in Arbeitsordner der Pfad abgelegt. 
92.
sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind). 
93.
oVerlinkteDateien.WriteLine Replace(sNameTemp, "_", " ") 'Ersetzen von "_" mit " " 
94.
Next 
95.
oVerlinkteDateien.Close
Edit end
Bitte warten ..
Mitglied: bastla
04.09.2007 um 00:48 Uhr
Hallo Fraenky!

Vielleicht in weiterer Folge besser hier als per Mail ...

In diesem zugegebenermaßen seltenen Fall: Dateiname.txt.php
01.
sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind).
würde nach der Bearbeitung doch "Dateiname" überbleiben oder?, also würde als Beschreibung eher gelten: Alles links vom ersten "." wird genommen.Oder?
Es würde "Dateiname.txt" bleiben - wenn Du Alles links vom ersten "." haben willst, musst Du InStr() anstelle von InStrRev() verwenden.
Gibt es überhaupt die Möglichkeit, wie unter Dos, die Parameter und Syntax der einzelnen Befehle der einzelnen Dienste abzufragen?
Soferne Du eine Online-Hilfe/-Referenz meinst (in der Offline-Version ): http://www.microsoft.com/downloads/details.aspx?familyid=01592C48-207D- ... bzw alternativ eine deutschsprachige Version, zB von hier: http://wsh-vbs.de/scr56de.chm/script56.chm ...

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
04.09.2007 um 15:33 Uhr
Hallo bastla.
Danke nochmals für den Link:
http://wsh-vbs.de/scr56de.chm/script56.chm
Super offline Hilfedatei mit Syntax usw.
Da Wir ja doch nicht um die Übertragung der Sonderzeichen bei der Linkerstellung herumkommen, habe ich hier gerade folgende Konversationstabelle aufgeschrieben:
Á1 = Anzeige im Browser
%C1 = Ordnername in html
&Aacute; = Bezeichnung des Sonderz. in html

Á1 <a href="LinkOrdner/%C11.php">&Aacute;1</a>

= Á = %C1 = &Aacute;

á2 <a href="LinkOrdner/%E12.php">&aacute;2</a>

= á = %E1 = &aacute;

À1 <a href="LinkOrdner/%C01.php">&Agrave;1</a>

= À = %C0 = &Agrave;

à2 <a href="LinkOrdner/%E02.php">&agrave;2</a>

= à = %E0 = &agrave;

Â1 <a href="LinkOrdner/%C21.php">&Acirc;1</a>

= Â = %C2 = &Acirc;

â2 <a href="LinkOrdner/%E22.php">&acirc;2</a>

= â = %E2 = &acirc;

Ã1 <a href="LinkOrdner/%C31.php">&Atilde;1</a>

= Ã = %C3 = &Atilde;

ã2 <a href="LinkOrdner/%E32.php">&atilde;2</a>

= ã = %E3 = &atilde;

Ç1 <a href="LinkOrdner/%C71.php">&Ccedil;1</a>

= Ç = %C7 = &Ccedil;

ç2 <a href="LinkOrdner/%E72.php">&ccedil;2</a>

= ç = %E7 = &ccedil;

É1 <a href="LinkOrdner/%C91.php">&Eacute;1</a>

= É = %C9 = &Eacute;

é2 <a href="LinkOrdner/%E92.php">&eacute;2</a>

= é = %E9 = &eacute;

È1 <a href="LinkOrdner/%C81.php">&Egrave;1</a>

= È = %C8 = &Egrave;

è2 <a href="LinkOrdner/%E82.php">&egrave;2</a>

= è = %E8 = &egrave;

Ê1 <a href="LinkOrdner/%CA1.php">&Ecirc;1</a>

= Ê = %CA = &Ecirc;

ê2 <a href="LinkOrdner/%EA2.php">&ecirc;2</a>

= ê = %EA = &ecirc;

Í1 <a href="LinkOrdner/%CD1.php">&Iacute;1</a>

= Í = %CD = &Iacute;

í2 <a href="LinkOrdner/%ED2.php">&iacute;2</a>

= í = %ED = &iacute;

Ì1 <a href="LinkOrdner/%CC1.php">&Igrave;1</a>

= Ì = %CC = &Igrave;

ì2 <a href="LinkOrdner/%EC2.php">&igrave;2</a>

= ì = %EC = &igrave;

Õ1 <a href="LinkOrdner/%D51.php">&Otilde;1</a>

= Õ = %D5 = &Otilde;

õ2 <a href="LinkOrdner/%F52.php">&otilde;2</a>

= õ = %F5 = &otilde;

Ú1 <a href="LinkOrdner/%DA1.php">&Uacute;1</a>

= Ú = %DA = &Uacute;

ú2 <a href="LinkOrdner/%FA2.php">&uacute;2</a>

= ú = %FA = &uacute;

Das sind die Sonderzeichen, die vorraussichtlich im Einsatz sind:
= Á = %C1 = &Aacute;
= á = %E1 = &aacute;
= À = %C0 = &Agrave;
= à = %E0 = &agrave;
= Â = %C2 = &Acirc;
= â = %E2 = &acirc;
= Ã = %C3 = &Atilde;
= ã = %E3 = &atilde;
= Ç = %C7 = &Ccedil;
= ç = %E7 = &ccedil;
= É = %C9 = &Eacute;
= é = %E9 = &eacute;
= È = %C8 = &Egrave;
= è = %E8 = &egrave;
= Ê = %CA = &Ecirc;
= ê = %EA = &ecirc;
= Í = %CD = &Iacute;
= í = %ED = &iacute;
= Ì = %CC = &Igrave;
= ì = %EC = &igrave;
= Õ = %D5 = &Otilde;
= õ = %F5 = &otilde;
= Ú = %DA = &Uacute;
= ú = %FA = &uacute;
Wenn das Script andere Zeichen zwischen "/" und "." und zwischen "&" und ";" findet, soll es das in Protokoll schreiben, damit die Tabelle erweitert werden kann.
Einsatz der Tabelle:
Wenn im Arbeitsordner, der die verlinkten Dateien enthällt, eine Datei mehr ist, als Links vorhanden sind, soll ja ein Link in der Linkliste zu dieser Datei erstellt werden. Wenn der Dateiname Sonderzeichen enthällt, soll zuerst dieses Sonderzeichen mit dieser Tabelle umgewandelt werden, um den Dateinamen in html zu bezeichenen: LinkOrdner/%FA2.php, um danach den Linknamen in html darzustellen:
php">&uacute;2</a>
Wenn der andere Fall eintritt, das nähmlich mehr Links in der Linkliste auftauchen, ohne die entsprechenden Dateien finden zu können, soll diese Datei im Arbeitsordner leer erstellt werden.
Also aus %FA2.php im Link wird die Datei ú2.php.
Damit ist schon mal die Problematik der Sonderzeichen gelöst.
Gruß
Fraenky
Bitte warten ..
Mitglied: Fraenky
04.09.2007 um 21:42 Uhr
Hallo bastla.
Danke nochmal für die Hilfedatei.
Ich hoffe, die Liste mit den Sonderzeichen hilft, die Übersetzung für die Sonderzeichen sicherzustellen. Wir können sie ja in eine Datenbank einspeisen, um dann im Falle der Linkerstellung darauf zuzugreifen.

Das jetzige Script funktioniert noch nicht richtig.
Die Schleife:
01.
DataList.MoveFirst 'beim ersten Datensatz beginnen ... 
02.
 
03.
			DataList.Fields.Item("Text") 
04.
			oLinkNamen.WriteLine (DataList.Fields.Item("Text")) 
05.
			DataList.MoveNext 
06.
			oLinkNamen.Close
wird nur einmal ausgeführt, das heist, nur ein Eintrag in LinkNamen.txt, auch wenn ich die Zeile
oLinkNamen.Close
ans Ende des Scriptes verschiebe, wo sie wahrscheinlich auch hingehört.
Und gleichzeitig sollte jetzt schon die Übersetzung der Sonderzeichen stattfinden, um später den Vergleich durchführen zu können.
Kannst Du das in einen Code gießen?
Grüße
Fraenky
Bitte warten ..
Mitglied: bastla
04.09.2007 um 22:45 Uhr
Hallo Fraenky!

Kannst Du das in einen Code gießen?
Heute sicher nicht mehr ...

Außerdem würde ich vielleicht generell noch eine andere Strategie vorschlagen: Wenn Du ohnehin alle Dateien des Arbeitsordners verlinken willst, könntest Du vorweg für diese Dateien neue, richtige, Links erstellen und mit den berichtigten "alten" Links in der Datenbank zusammenfassen. Die weitere Vorgangsweise könnte Dir bekannt vorkommen: alle (alten und neuen) Links sortieren und die sortierte Liste so ausgeben, dass Duplikate (unter Ausschaltung der Groß- und Kleinschreibung) eliminiert werden - eigentlich hast Du den dafür erforderlichen Code schon.
Zum Thema "Schliefe wird nur einmal ausgeführt": Eine Schleife ist es erst, wenn Du einen Schleifenkopf und -fuß verwendest, also etwa:
01.
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True) 
02.
 
03.
DataList.MoveFirst 
04.
Do While Not DataList.EOF 'Schleifenkopf 
05.
	oLinkNamen.WriteLine DataList.Fields.Item("Text") 
06.
	DataList.MoveNext 
07.
Loop 'Schleifenfuß 
08.
 
09.
oLinkNamen.Close
Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
04.09.2007 um 23:25 Uhr
Hallo bastla.
Deine Erläuterung mit der Schleife war wieder mal goldrichtig. Alles läuft so, wie es angedacht war. Jetzt muß in der Datei LinkNamen.txt nur noch die Konvertierung stattfinden, um die Vergleichbarkeit sicherzustellen.
Deine vorgeschlagene Vorgangsweise ist eine komprimierte Form, die Wir vielleicht in Version 2 umsetzen können.
Hier möchte ich Schritt für Schritt vorgehen, um alle Operationen klar nachzuvollziehen.
Jetzt haben Wir allso zwei Dateien, von der eine noch konvertiert werden muß. Zu diesem Zweck werde ich jetzt die Datei Sonderzeichen:
Á,%C1,&Aacute;
á,%E1,&aacute;
À,%C0,&Agrave;
à,%E0,&agrave;
Â,%C2,&Acirc;
â,%E2,&acirc;
Ã,%C3,&Atilde;
ã,%E3,&atilde;
Ç,%C7,&Ccedil;
ç,%E7,&ccedil;
É,%C9,&Eacute;
é,%E9,&eacute;
È,%C8,&Egrave;
è,%E8,&egrave;
Ê,%CA,&Ecirc;
ê,%EA,&ecirc;
Í,%CD,&Iacute;
í,%ED,&iacute;
Ì,%CC,&Igrave;
ì,%EC,&igrave;
Õ,%D5,&Otilde;
õ,%F5,&otilde;
Ú,%DA,&Uacute;
ú,%FA,&uacute;

erstellen und diese in eine neue Datenbank einlesen und splitten lassen.
Danach soll das Script die Datei LinkNamen auf Sonderzeichen durchsuchen und das Sonderzeichen aus Feld 3 mit dem Zeichen aus Feld 1 in der Datei LinkNamen ersetzen.
Damit haben Wir die selbe Codierung in beiden Dateien, also ist der Vergleich möglich.

Grüße
Fraenky
Bitte warten ..
Mitglied: Fraenky
05.09.2007 um 00:15 Uhr
Hallo bastla.
Hier die neue Datenbank ohne Abfrage.
01.
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt" 
02.
Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForWriting, True) 
03.
Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
04.
DataList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable 
05.
DataList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable 
06.
DataList.Fields.Append "SonderNam", adVarChar, MaxCharacters, adFldIsNullable 
07.
DataList.Open 
08.
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 
09.
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende 
10.
	aZeile = Split(oLinkListe.ReadLine, ",") 'Zeile einlesen und an dem Komma zerteilen 
11.
	lInCounter = lIncounter + 1 
12.
	If UBound(aZeile) = 2 Then '2 Kommas gefunden - 3 Teile: 
13.
		'1. Teil = aZeile(0): Sonder 
14.
		'2. Teil = aZeile(1): SonderDat 
15.
		'3. Teil = aZeile(2): SonderNam 
16.
 
17.
			 
18.
Bis jetzt sind doch die Sonderzeichen in die Datenbank eingelesen, gesplitter und benannt. 
19.
Wie erfolgt den jetzt die Überprüfung der LinkNamen.txt ? 
20.
Loop
Gruß
Fraenky
Bitte warten ..
Mitglied: Fraenky
05.09.2007 um 13:39 Uhr
Hallo bastla.
Habe jetzt die Datenbank eingebaut und eine Anweisung eingebaut.
Bekomme aber Fehlermeldungen.
Kannst Du mal Dein Adlerauge schweifen lassen?
01.
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind 
02.
'sPath = auch Arbeitsordner 
03.
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt" 
04.
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt" 
05.
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt" 
06.
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt" 
07.
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt" 
08.
 
09.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
10.
Set fso = CreateObject("Scripting.FileSystemObject") 
11.
Const adVarChar = 200'Datenbankfelder 
12.
Const MaxCharacters = 255 
13.
Const adFldIsNullable = 32 
14.
 
15.
Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading, false) 
16.
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True) 
17.
Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
18.
DataList.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren 
19.
DataList.Fields.Append "Text", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren 
20.
DataList.Open 
21.
 
22.
Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
23.
DataList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable 
24.
DataList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable 
25.
DataList.Fields.Append "SonderNam", adVarChar, MaxCharacters, adFldIsNullable 
26.
DataList.Open 
27.
 
28.
For Each Line in LinkNamen' 
29.
oLinkNamen.WriteLine Replace("SonderNam", "Sonder") 
30.
Next 
31.
 
32.
 
33.
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 
34.
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende 
35.
	aZeile = Split(oLinkListe.ReadLine, ",") 'Zeile einlesen und an dem Komma zerteilen 
36.
	lInCounter = lIncounter + 1 
37.
	If UBound(aZeile) = 2 Then '2 Kommas gefunden - 3 Teile: 
38.
		'1. Teil = aZeile(0): Sonder 
39.
		'2. Teil = aZeile(1): SonderDat 
40.
		'3. Teil = aZeile(2): SonderNam 
41.
 
42.
 
43.
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen 
44.
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben 
45.
lInCounter = 0 
46.
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende 
47.
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen 
48.
	lInCounter = lIncounter + 1 
49.
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile: 
50.
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen) 
51.
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen) 
52.
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen) 
53.
 
54.
		'Zerlegung des 3. Teiles: 
55.
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text 
56.
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """") 
57.
		Else 
58.
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<" 
59.
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">" 
60.
			If aZeile(1) <> "" Or sText <> "" Then 
61.
				DataList.AddNew 'neuen Datensatz erstellen 
62.
				DataList("URL") = aZeile(1) 'Feld "URL" befüllen 
63.
				DataList("Text") = sText    'Feld "Text" befüllen  
64.
				DataList.Update '...  und Datensatz eintragen  
65.
			Else 
66.
				'Eintrag in das Protokoll: 
67.
					'Alle Teile zusammenfassen, 
68.
					'dabei die entfernten Anführungszeichen wieder einfügen und 
69.
					'Zeile in Protokolldatei schreiben 
70.
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """") 
71.
			End If 
72.
		End If 
73.
	Else 
74.
		'anderer Zeilenaufbau - wäre näher zu untersuchen 
75.
		'zumindest Protokolleintrag erstellen 
76.
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """") 
77.
	End If 
78.
Loop 
79.
DataList.MoveFirst 'beim ersten Datensatz beginnen ... 
80.
Do While Not DataList.EOF 'Schleifenkopf 
81.
			oLinkNamen.WriteLine DataList.Fields.Item("Text") 
82.
			DataList.MoveNext 
83.
			Loop 'Schleifenfuß 
84.
 
85.
If WScript.Arguments.Count > 0 Then 
86.
	sArg = WScript.Arguments(0) 
87.
	If fso.FileExists(sArg) Then 'Aufruf mit šbergabe einer Datei 
88.
		sPath = fso.GetFile(sArg).Path 
89.
		sPath = Left(sPath, InStrRev(sPath, "\") - 1) 
90.
	Else 'oder ev eines Ordners 
91.
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path 
92.
	End If 
93.
End If 
94.
If sPath = "" Then 'Kein (gltiger) Pfad bergeben, daher Dialog 
95.
	Set oFolder = CreateObject("Shell.Application") _ 
96.
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17) 
97.
	If TypeName(oFolder) = "Nothing" Then 
98.
		sPath = Arbeitsordner 
99.
	Else 
100.
		sPath = oFolder.Self.Path 
101.
	End If 
102.
End If 
103.
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen 
104.
Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Verbindung 
105.
'zur geöffneten VerlinkteDateien.txt herrgestellt. 
106.
For Each File in Folder.Files'Hier für jede Datei in Arbeitsordner der Pfad abgelegt. 
107.
sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind). 
108.
oVerlinkteDateien.WriteLine Replace(sNameTemp, "_", " ") 'Ersetzen von "_" mit " " 
109.
Next 
110.
oVerlinkteDateien.Close 
111.
oLinkNamen.Close 
112.
oSonderzeichen.Close 
113.
oProtokoll.Close 
114.
oLinkListe.Close
Gruß
Fraenky
Bitte warten ..
Mitglied: bastla
05.09.2007 um 14:53 Uhr
Hallo Fraenky!

Zum Testen fehlt mir momentan die Zeit, daher nur als Entwurf:
01.
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind 
02.
'sPath = auch Arbeitsordner 
03.
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt" 
04.
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt" 
05.
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt" 
06.
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt" 
07.
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt" 
08.
 
09.
Set fso = CreateObject("Scripting.FileSystemObject") 
10.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
11.
 
12.
'###### Argumente prüfen - Pfad festlegen ###### 
13.
If WScript.Arguments.Count > 0 Then 
14.
	sArg = WScript.Arguments(0) 
15.
	If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei 
16.
		sPath = fso.GetFile(sArg).Path 
17.
		sPath = Left(sPath, InStrRev(sPath, "\") - 1) 
18.
	Else 'oder ev eines Ordners 
19.
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path 
20.
	End If 
21.
End If 
22.
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog 
23.
	Set oFolder = CreateObject("Shell.Application") _ 
24.
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17) 
25.
	If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden 
26.
		sPath = Arbeitsordner 
27.
	Else 
28.
		sPath = oFolder.Self.Path 
29.
	End If 
30.
End If 
31.
 
32.
Const adVarChar = 200'Datenbankfelder 
33.
Const MaxCharacters = 255 
34.
Const adFldIsNullable = 32 
35.
 
36.
'###### Sonderzeichen-Datenbank aufbauen und befüllen ###### 
37.
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
38.
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable 
39.
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable 
40.
SonderList.Fields.Append "SonderNam", adVarChar, MaxCharacters, adFldIsNullable 
41.
SonderList.Open 
42.
 
43.
Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading) 
44.
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende 
45.
	aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen 
46.
	If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar 
47.
		SonderList.AddNew 
48.
		SonderList("Sonder") = aZeile(0) 
49.
		SonderList("SonderDat") = aZeile(1) 
50.
		SonderList("SonderNam") = aZeile(2) 
51.
		SonderList.Update 
52.
	End If 
53.
Loop 
54.
oSonderzeichen.Close 
55.
 
56.
'###### Link-Datenbank aufbauen und befüllen ###### 
57.
Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
58.
DataList.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren 
59.
DataList.Fields.Append "Text", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren 
60.
DataList.Open 
61.
 
62.
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben 
63.
 
64.
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen 
65.
lInCounter = 0 
66.
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende 
67.
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen 
68.
	lInCounter = lIncounter + 1 
69.
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile: 
70.
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen) 
71.
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen) 
72.
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen) 
73.
 
74.
		'Zerlegung des 3. Teiles: 
75.
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text 
76.
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """") 
77.
		Else 
78.
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<" 
79.
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">" 
80.
			If aZeile(1) <> "" Or sText <> "" Then 
81.
				DataList.AddNew 'neuen Datensatz erstellen 
82.
				DataList("URL") = aZeile(1) 'Feld "URL" befüllen 
83.
				DataList("Text") = SonderKonvert(sText)    'Feld "Text" befüllen; dazu vorweg Sonderzeichen konvertieren 
84.
				DataList.Update '...  und Datensatz eintragen  
85.
			Else 
86.
				'Eintrag in das Protokoll: 
87.
					'Alle Teile zusammenfassen, 
88.
					'dabei die entfernten Anführungszeichen wieder einfügen und 
89.
					'Zeile in Protokolldatei schreiben 
90.
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """") 
91.
			End If 
92.
		End If 
93.
	Else 
94.
		'anderer Zeilenaufbau - wäre näher zu untersuchen 
95.
		'zumindest Protokolleintrag erstellen 
96.
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """") 
97.
	End If 
98.
Loop 
99.
oLinkListe.Close 
100.
 
101.
oProtokoll.Close 
102.
 
103.
'###### Linknamen in Datei schreiben ###### 
104.
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True) 
105.
 
106.
DataList.MoveFirst 'beim ersten Datensatz beginnen ... 
107.
Do While Not DataList.EOF 
108.
	oLinkNamen.WriteLine DataList.Fields.Item("Text") 
109.
	DataList.MoveNext 
110.
Loop 
111.
oLinkNamen.Close 
112.
 
113.
'###### Dateinamen einlesen und (ggf berichtigt) in Datei schreiben ###### 
114.
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen 
115.
 
116.
Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Datei "VerlinkteDateien.txt" geöffnet. 
117.
 
118.
For Each File in Folder.Files 'Hier wird für jede Datei in Arbeitsordner der Name abgelegt. 
119.
	sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind). 
120.
	oVerlinkteDateien.WriteLine Replace(sNameTemp, "_", " ") 'Ersetzen von "_" mit " " 
121.
Next 
122.
oVerlinkteDateien.Close 
123.
 
124.
 
125.
'##################################### Ende des Hauptprogramms ##################################### 
126.
 
127.
 
128.
'###### Funktion zum Konvertieren von Sonderzeichen ###### 
129.
Function SonderKonvert(sUnkonvertiert) 
130.
sTemp = sUnkonvertiert 
131.
SonderList.MoveFirst 
132.
Do While Not SonderList.EOF 
133.
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderNam"), SonderList.Fields.Item("Sonder")) 
134.
	SonderList.MoveNext 
135.
Loop 
136.
SonderKonvert = sTemp 
137.
End Function
Ich habe die einzelnen Arbeitsschritte in eine für mich sinnvollere Reihenfolge gebracht und etwas deutlicher gekennzeichnet.

Neu hinzugekommen ist (weil übersichtlicher: als eigene Function) "SonderKonvert()" - für einen dieser Funktion übergebenen Text werden alle in der Sonderzeichen-Datenbank enthaltenen Konvertierungen in einem Arbeitsgang vorgenommen und als Ergebnis ein vollständig konvertierter Text zurückgeliefert.

Im übrigen wäre anzumerken, dass die Link-Datenbank bei der derzeitigen Vorgangsweise keinen wirklichen Sinn hat - es würde eigentlich genügen, jede Zeile nach dem Einlesen, Überprüfen und Konvertieren sofort wieder in die neue Datei "LinkNamen" zu schreiben - das Zwischenspeichern in der Datenbank bringt dabei eigentlich nichts, und eine Sortierung, welche ursprünglich der Grund für den Einsatz der Datenbank war, wird auch nicht vorgenommen ...

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
05.09.2007 um 18:25 Uhr
Hallo bastla.
Mancher währe glücklich, nach viel Arbeit die Quallität Deiner Entwürfe zu erreichen.
Einwandfrei, astrein, läuft so weit.
Das Wir erstmal die Datei LinkNamen erstellt haben, hatte auf jeden Fall den Vorteil, das fehlende Sonderzeichen bei Durchsicht ergänzt werden konnten, so das sie jetzt einwandfrei geschrieben ist.
Wir haben jetzt also beide Dateien ( LinkNamen.txt und VerlinkteDateien.txt) im selben Code geschrieben. Der nächste Schritt ist das zeilenweise Vergleichen beider Dateien. Wenn Übereinstimmung gefunden, das Paar aus beiden Dateien löschen, so das ein einmaliger Rest übrig bleibt, der dann im nächsten Schritt entsprechend behandelt wird.
Du als alter Praktiker hast natürlich recht, das das eine recht umständliche Weise war und das es durchaus effizienter in der Datenbank geht.
Aber jetzt zum Beispiel habe ich noch keine Ahnung, wie jeder Datensatz der einen Datei mit jedem Datensatz der anderen Datei verglichen wird. Durch das Schrittweise vorgehen steigt der Durchblick ins Script. Wenn Wir das jetzt noch realisiert haben, werden Wir erstmal die Datenbank optimieren, habe da schon Vorstellungen.
Die Sonderzeichen wurden allso nicht nach dem Schreiben in LinkNamen.txt durch einen neuen Durchlauf konvertiert, sondern durch die Funktion SonderKonvert beim schreiben erledigt.
Eine Funktion ist also eine ausgelagerte interne Behandlungsroutine, richtig?
01.
Do While Not SonderList.EOF 
02.
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderNam"), SonderList.Fields.Item("Sonder")) 
03.
	SonderList.MoveNext 
04.
Loop 
05.
SonderKonvert = sTemp
Hier geschieht also der Austausch zwischen den Sonderzeichen. Aber kannst Du mir das mal auf Deutsch erklären, verstehe die Logik noch nicht.
Auf jeden Fall hat die Auslagerung als Funktion den Vorteil, das sie in Verbindung mit der Datenbank sauber in andere Scripte übertragbar ist.
Mit welchem Befehl muß den der Vergleich der einzelnen Datensätze in zwei schon geschriebenen Dateien erfolgen?
Gruß
Fraenky
Bitte warten ..
Mitglied: bastla
05.09.2007 um 19:19 Uhr
Hallo Fraenky!

... sondern durch die Funktion SonderKonvert beim schreiben erledigt.
Genau genommen bereits beim Eintragen in die Link-Datenbank:
DataList("Text") = SonderKonvert(sText)

In der Function wird natürlich vorausgesetzt, dass die "SonderList"-Datenbank bereits erstellt (eingelesen) wurde, was beí einer Verwendung in einem anderen Script zu berücksichtigen wäre.
Zur Vorgangsweise:
In der Schleife über alle Sonderzeichen wird einfach versucht, jedes Sonderzeichen zu ersetzen, unabhängig davon, ob es tatsächlich in "sTemp" enthalten ist: Wenn enthalten, wird ersetzt, wenn nicht, bleibt der Variableninhalt eben unverändert - vielleicht nicht die effizienteste, aber eine effektive Lösung.
Mit welchem Befehl muß den der Vergleich der einzelnen Datensätze in zwei schon geschriebenen Dateien erfolgen?
In den Dateien kann nicht verglichen werden, dazu müssen die Datensätze wieder eingelesen werden - deshalb auch meine seinerzeitige Frage nach dem Sinn des Schreibens in die einzelnen Dateien ...

Eine Lösung für das Vergleichen hatte ich oben schon vorgeschlagen: Alle Daten (aus den beiden Dateien) in eine gemeinsame Datenbank stellen, die Datenbank sortieren und danach nur jene Datensätze, die sich vom Vorgänger unterscheiden, in die Ergebnisdatei schreiben.

Alternativ dazu müsste in einer (äußeren) Schleife jeder Satz der einen Datei eingelesen und in einer weiteren (inneren) Schleife mit jedem Satz der anderen Datei verglichen werden. Optimieren könnte man den Vorgang, indem die zweite Datei sortiert gespeichert wird, sodass ich das Vergleichen vorzeitig abbrechen kann - etwa, wenn ein Link mit dem Buchstaben "F" beginnt, ist es nicht erforderlich, mit Einträgen der Vergleichsdatei, welche mit "G" oder höher beginnen, zu vergleichen.

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
05.09.2007 um 21:20 Uhr
Hallo bastla.
Also vergleicht man die Zeilen zweier Dateien über eine Datenbank.
Alle klar. Dann sind Wir also bei den Datenbanken.
Die Optimierung stelle ich mir folgendermaßen vor:
Nur der Einsatz einer Datenbank, wenn möglich.
In die ersten drei Spalten den Split der drei Codes aZeile (0 - 2), also ungefähr 20 Zeilen. In Spalte 4 aus Datei LinkNamen die zu konvertierenden LinkNamen, als Beispiel 3000 LinkNamen einlesen und in Spalte 5 aus Datei VerlinkteDateien die vorhandenen Dateien im Arbeitsordner, z.B 2500 Dateinamen, eintragen.
In Spalte 6 tragen Wir die URL ein.
Damit haben Wir alles unter einem Dach. Jetzt kommt es auf die richtigen Datenbankabfragen an.
Spalte 4 mit der neuen Funktion SonderKonvert konvertieren.
Also alle Sonderzeichen in Spalte 4 mit Spalte 3 vergleichen und gegebenenfalls mit Spalte 1 ersetzen.
Danach Spalte 4 mit 5 vergleichen und doppelte löschen, die restlichen Namen in die entsprechenden Dateien für einen Überblick eintragen.
Wenn danach in Spalte 4 noch LinkNamen vorhanden sind, bedeutet das, das mehr Links als verlinkte Dateien vorhanden sind. Also verbinde mehrteilige LinkNamen mit "_" und füge am Ende ein ".php" an(Link_Name.php) und erstelle die Datei im Arbeitsordner.
Wenn in Spalte 5 noch Namen stehen, bedeutet das, das mehr Dateien im Arbeitsordner als Links in LinkListe vorhanden sind.
Syntax:
<p><a href="../../../Pfad/Aben%E7a.php">Aben&ccedil;a</a></p>
Also schreibe für jeden Dateinamen aus Spalte 5 eine neue Zeile in LinkListe, füge aus Spalte 6 von vorn gesehen alles ein bis zum letzten "/", also so:
<p><a href="../../../Pfad/
Nimm den bereinigten Dateinamen, z.B. "Übrig Name", verbinde bei mehrteiligen Namen mit "_", füge am Ende ein .php an und konvertiere die Sonderzeichen mit Spalte 2 und füge an Zeile an:
<p><a href="../../../Pfad/Aben%E7a.php
füge weiterhin "">" ein:
<p><a href="../../../Pfad/Aben%E7a.php">
und konvertiere den gerade mit Unterstrich und .php vorbereiteten Dateinamen mit Spalte 3 und füge an:
<p><a href="../../../Pfad/Aben%E7a.php">Aben&ccedil;a
Füge Schlußtags ein: </a></p>
und füge die ganze Zeile an richtiger alphabetischer Position ein.
Sonderfälle:
<a title="Titel"href="Pfad/Estrela_Matutina.php">Estrela Matutina</a>
Man beachte den Titel mit nochmals zwei ", in diesem Fall soll vom ersten " bis zum 4 " wie URL behandelt werden.
Zusätzliche Abfrage:
Wenn nicht alle Einträge in LinkListe mit 4 " auftauchen, Abfrage
Es gibt Links ohne Titel, jetzt einfügen? J/N
Bei Ja, geben Sie Datei mit Titeln an, Auswahl über Explorer, zeilenweises einlesen aus Datei, Titel.txt, bei langen Titeln Blank als Trennzeichen, pro Zeile ein Titel für einen Link, wenn EOF in Titel.txt, oben wieder anfangen. Füge dem eingefügten Titel Blank und Linkname an:<a title="Titel Estrela Matutina"href="Pfad/
Bei Nein keine Titel einfügen.
Sonderfall:
Nur LinkName steht in Linkliste, ohne Verlinkung.
Estrela Matutina
Wenn kein Eintrag in Spalte 6 vorhanden, also keine URL, abfrage:
Geben Sie den Pfad ein. Eingabe wird als ""String genommen.
Alles weitere wie oben. Link vervollständigen und Datei erstellen, Abfrage wegen Titel.
Wenn URL in Spalte 6 vorhanden, nimm diese ohne Titel und mache Abfrage wegen Titel wie oben.
So, das sieht doch schon mal ganz gut aus.
Grüße
Fraenky
Bitte warten ..
Mitglied: Fraenky
06.09.2007 um 00:50 Uhr
Hallo bastla.
Hier ein erster Versuch, die Datenbänke zusammenzufassen. Leider kommt eine Fehlermeldung gerade auf die Zeile:
01.
sTemp = Replace(sTemp, SonderList.Fields.Item("SonderNam"), SonderList.Fields.Item("Sonder"))
Ist es überhaupt möglich, die Datenbanken zusammenzufassen, weil ja nur die ersten drei Spalten wagerecht zusammenhängen und nicht mit den anderen direkt zusammengehören?
Gruß
Fraenky

Zusammenfassung
01.
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind sPath = auch Arbeitsordner 
02.
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt" 
03.
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt" 
04.
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt" 
05.
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt" 
06.
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt" 
07.
 
08.
Set fso = CreateObject("Scripting.FileSystemObject") 
09.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
10.
 
11.
'###### Argumente prüfen - Pfad festlegen ###### 
12.
If WScript.Arguments.Count > 0 Then 
13.
	sArg = WScript.Arguments(0) 
14.
	If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei 
15.
		sPath = fso.GetFile(sArg).Path 
16.
		sPath = Left(sPath, InStrRev(sPath, "\") - 1) 
17.
	Else 'oder ev eines Ordners 
18.
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path 
19.
	End If 
20.
End If 
21.
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog 
22.
	Set oFolder = CreateObject("Shell.Application") _ 
23.
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17) 
24.
	If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden 
25.
		sPath = Arbeitsordner 
26.
	Else 
27.
		sPath = oFolder.Self.Path 
28.
	End If 
29.
End If 
30.
 
31.
'###### Dateinamen einlesen und (ggf berichtigt) in Datei schreiben ###### 
32.
'Hier könnte eigentlich Spalte VerliDat der Datenbank befüllt werden. 
33.
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen 
34.
Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Datei "VerlinkteDateien.txt" geöffnet. 
35.
For Each File in Folder.Files 'Hier wird für jede Datei in Arbeitsordner der Name abgelegt. 
36.
	sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind). 
37.
	oVerlinkteDateien.WriteLine Replace(sNameTemp, "_", " ") 'Ersetzen von "_" mit " " 
38.
Next 
39.
oVerlinkteDateien.Close 
40.
 
41.
 
42.
Const adVarChar = 200'Datenbankfelder 
43.
Const MaxCharacters = 255 
44.
Const adFldIsNullable = 32 
45.
 
46.
'###### Datenbank aufbauen und befüllen ###### 
47.
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
48.
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable      'Split(0) 
49.
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable   'Split(1) 
50.
SonderList.Fields.Append "SonderNam", adVarChar, MaxCharacters, adFldIsNullable   'Split(2) 
51.
SonderList.Fields.Append "Text", adVarChar, MaxCharacters, adFldIsNullable        'Feld "LinkNamen" definieren 
52.
SonderList.Fields.Append "VerliDat", adVarChar, MaxCharacters, adFldIsNullable    'Feld Verlinkte Dateien definieren 
53.
SonderList.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable         'Feld "URL" definieren 
54.
SonderList.Open 
55.
 
56.
 
57.
Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading) 
58.
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende 
59.
	aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen 
60.
	If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar 
61.
		SonderList.AddNew 
62.
		SonderList("Sonder") = aZeile(0) 
63.
		SonderList("SonderDat") = aZeile(1) 
64.
		SonderList("SonderNam") = aZeile(2) 
65.
		SonderList.Update 
66.
	End If 
67.
Loop 
68.
oSonderzeichen.Close 
69.
 
70.
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben 
71.
 
72.
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen 
73.
lInCounter = 0 
74.
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende 
75.
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen 
76.
	lInCounter = lIncounter + 1 
77.
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile: 
78.
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen) 
79.
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen) 
80.
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen) 
81.
 
82.
		'Zerlegung des 3. Teiles: 
83.
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text 
84.
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """") 
85.
		Else 
86.
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<" 
87.
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">" 
88.
			If aZeile(1) <> "" Or sText <> "" Then 
89.
				SonderList.AddNew 'neuen Datensatz erstellen 
90.
				SonderList("URL") = aZeile(1) 'Feld "URL" befüllen 
91.
				SonderList("Text") = SonderKonvert(sText)    'Feld "Text" befüllen; dazu vorweg Sonderzeichen konvertieren 
92.
				SonderList.Update '...  und Datensatz eintragen  
93.
			Else 
94.
				'Eintrag in das Protokoll: 
95.
					'Alle Teile zusammenfassen, 
96.
					'dabei die entfernten Anführungszeichen wieder einfügen und 
97.
					'Zeile in Protokolldatei schreiben 
98.
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """") 
99.
			End If 
100.
		End If 
101.
	Else 
102.
		'Hier können dann die Sonderfälle rein 
103.
		 
104.
	End If 
105.
Loop 
106.
oLinkListe.Close 
107.
oProtokoll.Close 
108.
 
109.
'###### Linknamen in Datei schreiben ###### 
110.
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True) 
111.
 
112.
SonderList.MoveFirst 'beim ersten Datensatz beginnen ... 
113.
Do While Not SonderList.EOF 
114.
	oLinkNamen.WriteLine SonderList.Fields.Item("Text") 
115.
	SonderList.MoveNext 
116.
Loop 
117.
oLinkNamen.Close 
118.
 
119.
 
120.
 
121.
'##################################### Ende des Hauptprogramms ##################################### 
122.
 
123.
 
124.
'###### Funktion zum Konvertieren von Sonderzeichen ###### 
125.
Function SonderKonvert(sUnkonvertiert) 
126.
sTemp = sUnkonvertiert 
127.
SonderList.MoveFirst 
128.
Do While Not SonderList.EOF 
129.
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderNam"), SonderList.Fields.Item("Sonder")) 
130.
	SonderList.MoveNext 
131.
Loop 
132.
SonderKonvert = sTemp 
133.
End Function
Bitte warten ..
Mitglied: bastla
06.09.2007 um 22:10 Uhr
Hallo Fraenky!

So verlockend die Idee auch sein mag, alle Daten in eine einzige Tabelle zu packen - das wird nix!

Jeder Datensatz einer solchen Tabelle muss den gleichen Aufbau haben, und ich kann nicht (sinnvoll) Teilbereiche von Datensätzen (mal 20 solche, dann 3000 eigentlich ganz andere, dann noch welche, ...) bilden. Die Aufteilung (zumindest zwischen Sonderzeichentabelle und Linkliste) sollte also jedenfalls beibehalten werden.

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
06.09.2007 um 22:42 Uhr
Hallo bastla.
OK. In dieser Richtung war ich auch unterwegs. Hier die angepasste Konzeption.
Dann bleibt also die erste Datenbank mit den Konvertierungsdaten.
Dann in der 2. Datenbank in der ersten Spalte die URL, in der zweiten Spalte die Auflistung der verlinkten Dateien und in der dritten Spalte die extraierten Linknamen, die beim Einlesen nach der Konvertierung mit der 2. Spalte Dateien verglichen wird.
Bei Übereinstimmung Namen in 2 löschen und nicht in 3 eintragen.
Die restlichen Namen aus 2 und 3 in die entsprechenden Dateien (VerlinkteDateien + LinkNamen) für einen Überblick eintragen. In diesen Dateien stehen also alle Namen, für die neue Dateien oder neue Links erstellt wurden.
Wenn also in Spalte 3 noch LinkNamen vorhanden sind, bedeutet das, das mehr Links als verlinkte Dateien vorhanden sind. Also verbinde mehrteilige LinkNamen mit "_" und füge am Ende ein ".php" an(Link_Name.php) und erstelle die Datei im Arbeitsordner.
Wenn in Spalte 2 noch Namen stehen, bedeutet das, das mehr Dateien im Arbeitsordner als Links in LinkListe vorhanden sind.
Syntax:
<p><a href="../../../Pfad/Aben%E7a.php">Aben&ccedil;a</a></p>
Also schreibe für jeden Dateinamen aus Spalte 2 eine neue Zeile in LinkListe, füge aus Spalte 1 von vorn gesehen alles ein bis zum letzten "/", also so:
<p><a href="../../../Pfad/
Nimm den bereinigten Dateinamen, z.B. "Übrig Name", verbinde bei mehrteiligen Namen mit "_", füge am Ende ein .php an und konvertiere die Sonderzeichen mit Spalte 2 (Konvertierungsdatenbank) und füge an Zeile an:
<p><a href="../../../Pfad/Aben%E7a.php
füge weiterhin "">" ein:
<p><a href="../../../Pfad/Aben%E7a.php">
und konvertiere den gerade mit Unterstrich und .php vorbereiteten Dateinamen mit Spalte 3 (Konvertierungsdatenbank) und füge an:
<p><a href="../../../Pfad/Aben%E7a.php">Aben&ccedil;a
Füge Schlußtags ein: </a></p>
und füge die ganze Zeile an richtiger alphabetischer Position ein.
Sonderfälle:
<a title="Titel"href="Pfad/Estrela_Matutina.php">Estrela Matutina</a>
Man beachte den Titel mit nochmals zwei ", in diesem Fall soll vom ersten " bis zum 4 " wie URL behandelt werden.
Zusätzliche Abfrage:
Wenn nicht alle Einträge in LinkListe mit 4 " auftauchen, Abfrage
Es gibt Links ohne Titel, jetzt einfügen? J/N
Bei Ja, geben Sie Datei mit Titeln an, Auswahl über Explorer, zeilenweises einlesen aus Datei, Titel.txt, bei langen Titeln ", "als Trennzeichen, pro Zeile ein Titel für einen Link, wenn EOF in Titel.txt, oben wieder anfangen. Füge dem eingefügten Titel Blank und Linkname an:<a title="Titel Estrela Matutina"href="Pfad/
Bei Nein keine Titel einfügen.
Sonderfall:
Nur LinkName steht in Linkliste, ohne Verlinkung.
Estrela Matutina
Wenn kein Eintrag in Spalte 1 vorhanden, also keine URL, abfrage:
Geben Sie den Pfad ein. Eingabe wird als ""String genommen.
Alles weitere wie oben. Link vervollständigen und Datei erstellen, Abfrage wegen Titel.
Wenn URL in Spalte 1 vorhanden, nimm diese ohne Titel und mache Abfrage wegen Titel wie oben.
So, das ist doch ungefähr das, was Du schon immer gesagt hast. Kannst Du das nochmal übersetzen?
Grüße
Fraenky
Bitte warten ..
Mitglied: Fraenky
07.09.2007 um 15:10 Uhr
Hallo bastla.
Vieleicht beschränken Wir Uns auf Unseren ursprünglichen Plan.
Lassen Wir die Thematik mit den Titeln außer Acht und machen einfach weiter.
Dann haben Wir also die zwei Datenbanken erstellt, die eine zum Konvertieren, klappt ja wunderbar , und die zweite zum Vergleichen von vorhandenen Dateiennamen mit Linknamen.
Die Linknamen wurden konvertiert eingelesen und in LinkNamen.txt gespeichert und die Dateinamen in VerlinkteDateien.txt.
Das nur, weil ich zu Fuß die einzelnen Arbeitsschritte durchgehen wollte.
Weil ja das Vergleichen von Zeilen in Dateien sowiso nur über eine Datenbank stattfinden kann, wie Wir ja herrausgefunden haben, , sollte die Ausgabe nicht in den Dateien stattfinden, sondern direkt in der Datenbank verarbeitet werden, wie Du ja oben auch schon gesagt hast.
Also alle verlinkten Dateien in Datenbank einlesen, danach die konvertierten Linknamen mit VerlinkteDateien Spalte vergleichen, wenn vorhanden, beide löschen, wenn nicht vorhanden, in Spalte Linknamen eintragen, so das am Ende nur die Dateien in den Spalten stehen, die nicht das entsprechende Gegenstück gefunden haben.
Mit diesen Namen wie oben schon aufgeführt verfahren.
Gruß
Fraenky
Bitte warten ..
Mitglied: bastla
07.09.2007 um 20:29 Uhr
Hallo Fraenky!

Zwischendurch eine Frage: Wozu willst Du eigentlich Links, die auf keine vorhandene Datei verweisen, behalten (bzw was machst Du mit den speziell dafür erstellten leeren Dateien)?

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
07.09.2007 um 20:52 Uhr
Hallo bastla.
Weil ja meine interne Linkliste mit der Zeit gewachsen ist und einige Operationen überstanden hat und im vorigen Script über 500 Dopplungen angezeigt und rausgefiltert wurden, (so viele Doppelte hatte ich bestimmt nicht, kann sein, das sich die Meldung auch auf auf zwei Zeilen aufgeteilte Links bezogen hat usw) und ich die Linkliste im nächsten Script als Positivliste einsetzen will, möchte ich die Integrität sicherstellen, das also für alle meine eingesetzten Links auch alle Dateien vorhanden sind. Soll heißen, ich möchte keine toten Links auf meiner Webseite einsetzen.
Die leeren Dateien werden später von mir mit den entsprechenden Übersetzungsinhalten und Erläuterungen noch gefüllt, sollen jetzt aber schon erstellt werden, um schon mal an den Start gehen zu können und später die Dateien der Reihe nach abarbeiten zu können.
Grüße
Fraenky
Bitte warten ..
Mitglied: Fraenky
10.09.2007 um 23:22 Uhr
Hallo bastla.
Habe das Prokekt bis hierhin konkretisiert.
Kannst Du den Rest mal übersetzten.
Oder stimmt die Logik soweit?
Gruß
Fraenky
01.
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind 
02.
'sPath = auch Arbeitsordner 
03.
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt" 
04.
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt" 
05.
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt" 
06.
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt" 
07.
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt" 
08.
 
09.
Set fso = CreateObject("Scripting.FileSystemObject") 
10.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
11.
 
12.
'###### Argumente prüfen - Pfad festlegen ###### 
13.
If WScript.Arguments.Count > 0 Then 
14.
	sArg = WScript.Arguments(0) 
15.
	If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei 
16.
		sPath = fso.GetFile(sArg).Path 
17.
		sPath = Left(sPath, InStrRev(sPath, "\") - 1) 
18.
	Else 'oder ev eines Ordners 
19.
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path 
20.
	End If 
21.
End If 
22.
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog 
23.
	Set oFolder = CreateObject("Shell.Application") _ 
24.
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17) 
25.
	If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden 
26.
		sPath = Arbeitsordner 
27.
	Else 
28.
		sPath = oFolder.Self.Path 
29.
	End If 
30.
End If 
31.
 
32.
Const adVarChar = 200'Datenbankfelder 
33.
Const MaxCharacters = 255 
34.
Const adFldIsNullable = 32 
35.
 
36.
'###### Sonderzeichen-Datenbank aufbauen und befüllen ###### 
37.
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
38.
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable 
39.
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable 
40.
SonderList.Fields.Append "SonderLink", adVarChar, MaxCharacters, adFldIsNullable 
41.
SonderList.Open 
42.
 
43.
Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading) 
44.
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende 
45.
	aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen 
46.
	If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar 
47.
		SonderList.AddNew 
48.
		SonderList("Sonder") = aZeile(0) 
49.
		SonderList("SonderDat") = aZeile(1) 
50.
		SonderList("SonderLink") = aZeile(2) 
51.
		SonderList.Update 
52.
	End If 
53.
Loop 
54.
oSonderzeichen.Close 
55.
 
56.
'###### Link-Datenbank aufbauen und befüllen ###### 
57.
Set LinkDat = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
58.
LinkDat.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren 
59.
LinkDat.Fields.Append "LinkName", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren 
60.
LinkDat.Open 
61.
 
62.
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben 
63.
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen 
64.
lInCounter = 0 
65.
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende 
66.
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen 
67.
	lInCounter = lIncounter + 1 
68.
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile: 
69.
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen) 
70.
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen) 
71.
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen) 
72.
 
73.
		'Zerlegung des 3. Teiles: 
74.
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text 
75.
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """") 
76.
		Else  '>expulso</a></p> 
77.
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<" 
78.
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">" 
79.
			If aZeile(1) <> "" Or sText <> "" Then 
80.
				LinkDat.AddNew 'neuen Datensatz erstellen 
81.
				LinkDat("URL") = aZeile(1) 'Feld "URL" befüllen 
82.
				LinkDat("LinkName") = SonderLinkSonderKonvert(sText)    'Feld "Text" befüllen; dazu vorweg Sonderzeichen konvertieren 
83.
				LinkDat.Update '...  und Datensatz eintragen  
84.
			Else 
85.
				'Eintrag in das Protokoll: 
86.
					'Alle Teile zusammenfassen, 
87.
					'dabei die entfernten Anführungszeichen wieder einfügen und 
88.
					'Zeile in Protokolldatei schreiben 
89.
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """") 
90.
			End If 
91.
		End If 
92.
	Else 
93.
		'anderer Zeilenaufbau - wäre näher zu untersuchen 
94.
		'zumindest Protokolleintrag erstellen 
95.
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """") 
96.
	End If 
97.
Loop 
98.
oLinkListe.Close 
99.
oProtokoll.Close 
100.
 
101.
 
102.
'###### Datei-Datenbank aufbauen und befüllen und Aktionen durchführen###### 
103.
Set DateiDat = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
104.
DateiDat.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren 
105.
DateiDat.Fields.Append "DateiName", adVarChar, MaxCharacters, adFldIsNullable 'Feld "DateiName" definieren 
106.
DateiDat.Open 
107.
Set oLinkListe = fso.OpenTextFile(LinkListe, ForWriting) 
108.
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen 
109.
For Each File in Folder.Files 'Hier wird für jede Datei in Arbeitsordner der Name abgelegt. 
110.
	Do While Not Folder.Files.AtEndOfStream 'Schleife bis zum Dateiende 
111.
		Abschneien ab Punkt bis Ende 
112.
		Vergleiche Dateinamen mit LinkName 
113.
		If Dateiname = LinkName lösche LinkName in LinkDat, sonst nichts 
114.
		Else Ansonsten erstelle Link 
115.
		Nimm aus LinkDat(URL) /welcher egal, liegen alle im selben Ordner 
116.
		'../Pfad/%C1gua.php 
117.
		und schneide bis zum letzten / incl. ab 
118.
		'../Pfad/ 
119.
		Jetzt haben Wir Grundpfad ohne SonderDat und ohne Sonderlink 
120.
		Speichere Grundpfad in DateiDat(URL) 
121.
		Nimm Dateinamen(Format Sonder), konvertiere mit SonderDat und füge Grundpfad an 
122.
		../Pfad/Beispiel 
123.
		ergänze mit ".php" 
124.
		../Pfad/Beispiel.php 
125.
		Füge an "">" 
126.
		../Pfad/Beispiel.php"> 
127.
		Nimm den konvertierten Dateinamen SonderDat und konvertiere mit SonderLink 
128.
		../Pfad/Beispiel.php">Beispiel und füge </a></p> an 
129.
		Füge am Anfang <p><a href=" ein. 
130.
		Nimm diesen Datensatz 
131.
		<p><a href="../Pfad/Beispiel.php">Beispiel</a></p> 
132.
		und schreibe Datensatz in Linkliste.txt an alphabetischer Position 
133.
Loop 
134.
oLinkListe.Close 
135.
 
136.
Jetzt muß noch der Rest in LinkDat(LinkName) behandelt werden. 
137.
	Nimm LinkName und füge .php an 
138.
	Erstelle Datei im Arbeitsordner 
139.
	 
140.
	Jetzt müßte es stimmen. 
141.
 
142.
 
143.
 
144.
'##################################### Ende des Hauptprogramms ##################################### 
145.
 
146.
 
147.
'###### Funktion zum Konvertieren von SonderLink in Sonder ###### 
148.
Function SonderLinkSonderKonvert(sUnkonvertiert) 
149.
sTemp = sUnkonvertiert 
150.
SonderList.MoveFirst 
151.
Do While Not SonderList.EOF 
152.
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderLink"), SonderList.Fields.Item("Sonder")) 
153.
	SonderList.MoveNext 
154.
Loop 
155.
SonderLinkSonderKonvert = sTemp 
156.
End Function 
157.
 
158.
 
159.
'###### Funktion zum Konvertieren von SonderDat in Sonder ###### 
160.
 
161.
Function SonderDatSonderKonvert(sUnkonvertiert) 
162.
sTemp = sUnkonvertiert 
163.
SonderList.MoveFirst 
164.
Do While Not SonderList.EOF 
165.
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderDat"), SonderList.Fields.Item("Sonder")) 
166.
	SonderList.MoveNext 
167.
Loop 
168.
SonderDatSonderKonvert = sTemp 
169.
End Function
Bitte warten ..
Mitglied: bastla
11.09.2007 um 01:56 Uhr
Hallo Fraenky!

Alternativvorschlag mit folgendem Ablauf:
  • bestehende Linkliste in Datenbank einlesen mit sofortiger Kontrolle der verlinkten Dateien
  • nicht vorhandene Dateien erstellen
  • existierende Dateien einlesen und als Links in die Datenbank schreiben
Inhalt der Datenbank jetzt: Doppelte Datensätze für die bereits in der ursprünglichen Liste vorhandenen Dateien; nur einmal vorhanden sind die neu erstellten Links der zusätzlichen Dateien des Arbeitsordners.
  • Sortierung nach URL, dadurch folgen die jeweiligen doppelten Sätze unmittelbar aufeinander
  • Vergleich mit dem vorhergehenden Datensatz, und nur wenn unterschiedlich,
  • Link in die Ergebnisdatei schreiben

01.
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind 
02.
'sPath = auch Arbeitsordner 
03.
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt" 
04.
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt" 
05.
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt" 
06.
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt" 
07.
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt" 
08.
Endergebnis = "C:\skript2\Liste_verifizieren\Fertig.txt" 
09.
 
10.
Set fso = CreateObject("Scripting.FileSystemObject") 
11.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
12.
 
13.
'###### Argumente prüfen - Pfad festlegen ###### 
14.
If WScript.Arguments.Count > 0 Then 
15.
	sArg = WScript.Arguments(0) 
16.
	If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei 
17.
		sPath = fso.GetFile(sArg).Path 
18.
		sPath = Left(sPath, InStrRev(sPath, "\") - 1) 
19.
	Else 'oder ev eines Ordners 
20.
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path 
21.
	End If 
22.
End If 
23.
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog 
24.
	Set oFolder = CreateObject("Shell.Application") _ 
25.
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17) 
26.
	If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden 
27.
		sPath = Arbeitsordner 
28.
	Else 
29.
		sPath = oFolder.Self.Path 
30.
	End If 
31.
End If 
32.
 
33.
Const adVarChar = 200'Datenbankfelder 
34.
Const MaxCharacters = 255 
35.
Const adFldIsNullable = 32 
36.
 
37.
'###### Sonderzeichen-Datenbank aufbauen und befüllen ###### 
38.
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
39.
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable 
40.
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable 
41.
SonderList.Fields.Append "SonderLink", adVarChar, MaxCharacters, adFldIsNullable 
42.
SonderList.Open 
43.
 
44.
Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading) 
45.
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende 
46.
	aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen 
47.
	If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar 
48.
		SonderList.AddNew 
49.
		SonderList("Sonder") = aZeile(0) 
50.
		SonderList("SonderDat") = aZeile(1) 
51.
		SonderList("SonderLink") = aZeile(2) 
52.
		SonderList.Update 
53.
	End If 
54.
Loop 
55.
oSonderzeichen.Close 
56.
 
57.
'###### Link-Datenbank aufbauen und befüllen ###### 
58.
Set LinkDat = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
59.
LinkDat.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren 
60.
LinkDat.Fields.Append "LinkName", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren 
61.
LinkDat.Open 
62.
 
63.
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben 
64.
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen 
65.
lInCounter = 0 
66.
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende 
67.
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen 
68.
	lInCounter = lIncounter + 1 
69.
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile: 
70.
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen) 
71.
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen) 
72.
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen) 
73.
 
74.
		'Zerlegung des 3. Teiles: 
75.
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text 
76.
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """") 
77.
		Else  '>expulso</a></p> 
78.
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<" 
79.
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">" 
80.
			If aZeile(1) <> "" Or sText <> "" Then 
81.
				LinkDat.AddNew 'neuen Datensatz erstellen 
82.
				LinkDat("URL") = aZeile(1)  'Feld "URL" befüllen 
83.
				LinkDat("LinkName") = sText 'Feld "Text" befüllen 
84.
				LinkDat.Update '...  und Datensatz eintragen 
85.
				 
86.
				'Überprüfen, ob die verlinkte Datei vorhanden ist und, falls nicht, diese erstellen 
87.
				aDatei = Split(aZeile(1), "/") 'an den "/" unterteilen ... 
88.
				sDatei = aDatei(UBound(aDatei)) '... und den letzten Teil als Dateinamen verwenden 
89.
				sDatei = SonderDatSonderKonvert(sDatei) 'Sonderzeichen konvertieren 
90.
				sDateiMitPfad = sPath & "\" & sDatei 
91.
				If Not fso.FileExists(sDateiMitPfad) Then 'existiert die Datei noch nicht, ... 
92.
					Set oNeueDatei = fso.OpenTextFile(sDateiMitPfad, ForWriting, True) '... dann erstellen 
93.
				End If 
94.
			Else 
95.
				'Eintrag in das Protokoll: 
96.
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """") 
97.
			End If 
98.
		End If 
99.
	Else 
100.
		'anderer Zeilenaufbau - wäre näher zu untersuchen 
101.
		'zumindest Protokolleintrag erstellen 
102.
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """") 
103.
	End If 
104.
Loop 
105.
oLinkListe.Close 
106.
oProtokoll.Close 
107.
 
108.
'###### Alle Links in der Datenbank verweisen jetzt auf existierende Dateien ...  ###### 
109.
 
110.
sURL = LinkDat.Fields.Item("URL") 
111.
sURLPfad = Left(sURL, InStrRev(sURL, "/")) 'URLPfad ermitteln 
112.
 
113.
'###### Alle im Arbeitsordner vorhandenen Dateien ebenfalls in Link-Datenbank eintragen ###### 
114.
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen 
115.
For Each File in Folder.Files 'Hier wird jede Datei im Arbeitsordner überprüft und ggf in die Liste aufgenommen 
116.
	sDatei = File.Name 
117.
	sDateiName = Left(sDatei, InStrRev(sDatei, ".") - 1) 'Namen isolieren 
118.
	sDateiTyp = Mid(sDatei, InStrRev(sDatei, ".")) 'Typ isolieren 
119.
	If LCase(sDateiTyp) = ".php" Then 'nur PHP-Dateien 
120.
		LinkDat.AddNew 'neuen Datensatz erstellen 
121.
		LinkDat("URL") = sURLPfad &  SonderDatKonvert(sDatei) 'Feld "URL" befüllen 
122.
		LinkDat("LinkName") = SonderLinkKonvert(Replace(sDateiName, "_", " ")) 'Feld "LinkName" befüllen; dazu vorweg Sonderzeichen konvertieren 
123.
		LinkDat.Update '...  und Datensatz eintragen 
124.
	End If 
125.
Next 
126.
 
127.
'###### Die Datenbank enthält jetzt alle existierenden Dateien, wobei alle 
128.
'        bereits früher in der Liste vorhandenen doppelt eingetragen sind ###### 
129.
 
130.
LinkDat.Sort = "URL" 
131.
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForWriting, True) 'Zieldatei öffnen; ev bereits vorhandene Datei überschreiben 
132.
 
133.
sPrevURL = "" 'Startwerte für Satzvergleich setzen 
134.
LinkDat.MoveFirst 'beim ersten Datensatz beginnen ... 
135.
Do Until LinkDat.EOF '... und bis zum letzten durchgehen 
136.
	'Unterschied zum vorhergehenden Datensatz? 
137.
	If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then 
138.
		'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben 
139.
		oEndergebnis.WriteLine "<p><a href=""" & _ 
140.
			LinkDat.Fields.Item("URL") & _ 
141.
			""">" & _ 
142.
			LinkDat.Fields.Item("LinkName") & _ 
143.
			"</a></p>" 
144.
		'letzte geschriebene Daten merken 
145.
		sPrevURL = LinkDat.Fields.Item("URL") 
146.
	End If 
147.
	'nächsten Datensatz auswählen 
148.
	LinkDat.MoveNext 
149.
Loop 
150.
'Ausgabedatei schließen 
151.
oEndergebnis.Close 
152.
 
153.
'##################################### Ende des Hauptprogramms ##################################### 
154.
 
155.
'###### Funktion zum Konvertieren von SonderLink in Sonder ###### 
156.
Function SonderLinkSonderKonvert(sUnkonvertiert) 
157.
sTemp = sUnkonvertiert 
158.
SonderList.MoveFirst 
159.
Do While Not SonderList.EOF 
160.
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderLink"), SonderList.Fields.Item("Sonder")) 
161.
	SonderList.MoveNext 
162.
Loop 
163.
SonderLinkSonderKonvert = sTemp 
164.
End Function 
165.
 
166.
'###### Funktion zum Konvertieren von SonderDat in Sonder ###### 
167.
Function SonderDatSonderKonvert(sUnkonvertiert) 
168.
sTemp = sUnkonvertiert 
169.
SonderList.MoveFirst 
170.
Do While Not SonderList.EOF 
171.
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderDat"), SonderList.Fields.Item("Sonder")) 
172.
	SonderList.MoveNext 
173.
Loop 
174.
SonderDatSonderKonvert = sTemp 
175.
End Function 
176.
 
177.
'###### Funktion zum Konvertieren von Sonder in SonderLink ###### 
178.
Function SonderLinkKonvert(sUnkonvertiert) 
179.
sTemp = sUnkonvertiert 
180.
SonderList.MoveFirst 
181.
Do While Not SonderList.EOF 
182.
	sTemp = Replace(sTemp, SonderList.Fields.Item("Sonder"), SonderList.Fields.Item("SonderLink")) 
183.
	SonderList.MoveNext 
184.
Loop 
185.
SonderLinkKonvert = sTemp 
186.
End Function 
187.
 
188.
'###### Funktion zum Konvertieren von Sonder in SonderDat ###### 
189.
Function SonderDatKonvert(sUnkonvertiert) 
190.
sTemp = sUnkonvertiert 
191.
SonderList.MoveFirst 
192.
Do While Not SonderList.EOF 
193.
	sTemp = Replace(sTemp, SonderList.Fields.Item("Sonder"), SonderList.Fields.Item("SonderDat")) 
194.
	SonderList.MoveNext 
195.
Loop 
196.
SonderDatKonvert = sTemp 
197.
End Function
Zusätzlich erforderlich waren die Sonderzeichen-Konvertierungen "Sonder --> SonderLink" bzw "Sonder --> SonderDat" für das Erstellen der Links der im Arbeitsordner vorhandenen Dateien sowie eine ergänzte "Sonderzeichen.txt":
01.
 ,%20,  
02.
À,%C0,&Agrave; 
03.
Á,%C1,&Aacute; 
04.
Â,%C2,&Acirc; 
05.
Ã,%C3,&Atilde; 
06.
Ä,%C4,Auml; 
07.
Ç,%C7,&Ccedil; 
08.
È,%C8,&Egrave; 
09.
É,%C9,&Eacute; 
10.
Ê,%CA,&Ecirc; 
11.
Ì,%CC,&Igrave; 
12.
Í,%CD,&Iacute; 
13.
Õ,%D5,&Otilde; 
14.
Ö,%D6,&Ouml; 
15.
Ú,%DA,&Uacute; 
16.
Ü,%DC,&Uuml; 
17.
à,%E0,&agrave; 
18.
á,%E1,&aacute; 
19.
â,%E2,&acirc; 
20.
ã,%E3,&atilde; 
21.
ä,%E4,&auml; 
22.
ç,%E7,&ccedil; 
23.
è,%E8,&egrave; 
24.
é,%E9,&eacute; 
25.
ê,%EA,&ecirc; 
26.
ì,%EC,&igrave; 
27.
í,%ED,&iacute; 
28.
ó,%F3,&oacute; 
29.
ô,%F4,&ocirc; 
30.
õ,%F5,&otilde; 
31.
ö,%F6,&ouml; 
32.
ú,%FA,&uacute; 
33.
ü,%FC,&uuml;
Bei dem von Dir vorgeschlagenen Ablauf wäre hinsichtlich der Umsetzung eine Besonderheit zu berücksichtigen: Es gibt keine Beziehung zwischen den beiden Datentabellen "LinkDat" und "DateiDat", sodass für jeden Vorgang "lösche LinkName in LinkDat" zunächst der zu löschende Datensatz in der "LinkDat" hätte gesucht werden müssen ...

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
11.09.2007 um 16:05 Uhr
Hallo bastla.
Sieht ja soweit ganz gut aus.
Aber leider bekomme ich einen Fehler in Zeile 118 Ungültiger Prozeduraudruf "Left".
Kannst Du die Funktionalität noch insoweit erweitern, das die hinzugefügten Links und Dateien in VerlinkteDateienNeu.txt und LinkNamenNeu.txt und die Gesammten Linknamen in Datei GesammtLinkNamen.txt, alles im Format "Sonder", eingetragen werden?
Ansonsten super Logik.
Zur Liste habe ich noch
Ô,%D4,&Ocirc;
Ó,%D3,&Oacute;
hizugefügt.
Danke und Gruß
Fraenky
Bitte warten ..
Mitglied: bastla
11.09.2007 um 16:08 Uhr
Hallo Fraenky!

Versuch es mit einer Sicherheitsabfrage vorweg:
01.
	If InStrRev(sDatei, ".") > 1 Then 
02.
		sDateiName = Left(sDatei, InStrRev(sDatei, ".") - 1) 'Namen isolieren 
03.
	End If
Kannst Du die Funktionalität noch insoweit erweitern ...
Ich hatte daran gedacht, aber mir dann überlegt, dass Du das vielleicht selbst machen möchtest.

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
11.09.2007 um 16:21 Uhr
Hallo bastla.
Nett von Dir.
Werde ich dann mal versuchen.
Gruß
Fraenky
Bitte warten ..
Mitglied: Fraenky
11.09.2007 um 18:53 Uhr
Hallo bastla.
Die Datei Fertig.txt wurde erstellt und ist 23 kb größer als Sortiert.txt.
An dem Arbeitsordner konnte ich mit den Dateien keine Veränderung feststellen. Das bedeutet doch, das Links in der LinkListe Fertig.txt gefehlt haben. Also war der Check schon mal nötig.
Auch testweise entfernte Dateien im Arbeitsordner wurden einwandfrei wiederhergestellt.
Soweit ist alles in Ordnung.
Bisher habe ich ja die Links in der LinkListe manuell erstellt. Also habe ich ein neues Wort im zu übersetzenden Text identifiziert, mit dem Wort eine Datei.php im Arbeitsordner erstellt und dann den Link dazu gemacht.
Darum ein Erweiterungsvorschlag:
Wenn in der LinkListe Namen ohne Link sind, also so:
<p>aben&ccedil;oar</p>
, dann soll dazu der Link und die Datei erstellt werden. Dann brauche ich nur die Wörter in die LinkListe eintragen, denn Rest macht dann das VBS.
Kannst Du mir das noch einfügen?
An den Protokolleinträgen arbeite ich noch.
Gruß
Fraenky
Bitte warten ..
Mitglied: bastla
11.09.2007 um 20:31 Uhr
Hallo Fraenky!

Wenn in der LinkListe Namen ohne Link sind ...
Welchen Sinn sollte es haben, einen Namen einzutragen, zu dem es keine Datei gibt (denn wenn es die Datei gibt, wird der Link ohnehin erstellt)? Da würde ich eher dazu raten, anstelle des Namenseintrages eine leere Datei zu erstellen - dann wird der Rest vom Script erledigt.

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
12.09.2007 um 20:37 Uhr
Hallo bastla.
Alles klar, kein Problem.
Hier der jetzige Stand der Dinge.
Leider ist die Datei LinkNamenNeu größer als die GesammtLinkNamen Datei. Kannst Du mir da mal meinen Fehler aufzeigen?

01.
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind 
02.
'sPath = auch Arbeitsordner 
03.
VerlinkteDateienNeu = "C:\skript2\Liste_verifizieren\VerlinkteDateienNeu.txt" 
04.
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt" 
05.
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt" 
06.
LinkNamenNeu = "C:\skript2\Liste_verifizieren\LinkNamenNeu.txt" 
07.
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt" 
08.
GesammtLinkNamen = "C:\skript2\Liste_verifizieren\GesammtLinkNamen.txt" 
09.
Endergebnis = "C:\skript2\Liste_verifizieren\Fertig.txt" 
10.
 
11.
Set fso = CreateObject("Scripting.FileSystemObject") 
12.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
13.
 
14.
'###### Argumente prüfen - Pfad festlegen ###### 
15.
If WScript.Arguments.Count > 0 Then 
16.
	sArg = WScript.Arguments(0) 
17.
	If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei 
18.
		sPath = fso.GetFile(sArg).Path 
19.
		sPath = Left(sPath, InStrRev(sPath, "\") - 1) 
20.
	Else 'oder ev eines Ordners 
21.
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path 
22.
	End If 
23.
End If 
24.
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog 
25.
	Set oFolder = CreateObject("Shell.Application") _ 
26.
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17) 
27.
	If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden 
28.
		sPath = Arbeitsordner 
29.
	Else 
30.
		sPath = oFolder.Self.Path 
31.
	End If 
32.
End If 
33.
 
34.
Const adVarChar = 200'Datenbankfelder 
35.
Const MaxCharacters = 255 
36.
Const adFldIsNullable = 32 
37.
 
38.
'###### Sonderzeichen-Datenbank aufbauen und befüllen ###### 
39.
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
40.
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable 
41.
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable 
42.
SonderList.Fields.Append "SonderLink", adVarChar, MaxCharacters, adFldIsNullable 
43.
SonderList.Open 
44.
 
45.
Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading) 
46.
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende 
47.
	aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen 
48.
	If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar 
49.
		SonderList.AddNew 
50.
		SonderList("Sonder") = aZeile(0) 
51.
		SonderList("SonderDat") = aZeile(1) 
52.
		SonderList("SonderLink") = aZeile(2) 
53.
		SonderList.Update 
54.
	End If 
55.
Loop 
56.
oSonderzeichen.Close 
57.
 
58.
'###### Link-Datenbank aufbauen und befüllen ###### 
59.
Set LinkDat = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen 
60.
LinkDat.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren 
61.
LinkDat.Fields.Append "LinkName", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren 
62.
LinkDat.Open 
63.
 
64.
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben 
65.
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen 
66.
Set oVerlinkteDateienNeu = fso.OpenTextFile(VerlinkteDateienNeu, ForWriting, True) 
67.
Set oGesammtLinkNamen = fso.OpenTextFile(GesammtLinkNamen, ForWriting, True) 
68.
lInCounter = 0 
69.
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende 
70.
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen 
71.
	lInCounter = lIncounter + 1 
72.
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile: 
73.
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen) 
74.
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen) 
75.
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen) 
76.
 
77.
		'Zerlegung des 3. Teiles: 
78.
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text 
79.
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """") 
80.
		Else  '>expulso<p></p> 
81.
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<" 
82.
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">" 
83.
			If aZeile(1) <> "" Or sText <> "" Then 
84.
				LinkDat.AddNew 'neuen Datensatz erstellen 
85.
				LinkDat("URL") = aZeile(1)  'Feld "URL" befüllen 
86.
				LinkDat("LinkName") = sText 'Feld "Text" befüllen 
87.
				LinkDat.Update '...  und Datensatz eintragen 
88.
				 
89.
				'Überprüfen, ob die verlinkte Datei vorhanden ist und, falls nicht, diese erstellen 
90.
				aDatei = Split(aZeile(1), "/") 'an den "/" unterteilen ... 
91.
				sDatei = aDatei(UBound(aDatei)) '... und den letzten Teil als Dateinamen verwenden 
92.
				sDatei = SonderDatSonderKonvert(sDatei) 'Sonderzeichen konvertieren 
93.
				sDateiMitPfad = sPath & "\" & sDatei 
94.
				sProtokollDuplikate = ProtokollDuplikate
Hier wird die GesammtLinkNamen und VelinkteDateienNeu beschrieben.

01.
				If Not fso.FileExists(sDateiMitPfad) Then 'existiert die Datei noch nicht, ... 
02.
					Set oNeueDatei = fso.OpenTextFile(sDateiMitPfad, ForWriting, True) '... dann erstellen 
03.
					oVerlinkteDateienNeu.WriteLine sDatei 
04.
					sDatei = Left(sDatei, InStrRev(sDatei, ".") - 1) 
05.
					oGesammtLinkNamen.WriteLine sDatei 
06.
					End If
01.
			Else 
02.
				'Eintrag in das Protokoll: 
03.
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """") 
04.
			End If 
05.
		End If 
06.
	Else 
07.
		'anderer Zeilenaufbau - wäre näher zu untersuchen 
08.
		'zumindest Protokolleintrag erstellen 
09.
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """") 
10.
	End If 
11.
Loop 
12.
oLinkListe.Close 
13.
oProtokoll.Close 
14.
oVerlinkteDateienNeu.Close 
15.
oGesammtLinkNamen.Close 
16.
 
17.
'###### Alle Links in der Datenbank verweisen jetzt auf existierende Dateien ...  ###### 
18.
 
19.
sURL = LinkDat.Fields.Item("URL") 
20.
sURLPfad = Left(sURL, InStrRev(sURL, "/")) 'URLPfad ermitteln 
21.
 
22.
'###### Alle im Arbeitsordner vorhandenen Dateien ebenfalls in Link-Datenbank eintragen ###### 
23.
Set oGesammtLinkNamen = fso.OpenTextFile(GesammtLinkNamen, ForAppending) 
24.
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen 
25.
For Each File in Folder.Files 'Hier wird jede Datei im Arbeitsordner überprüft und ggf in die Liste aufgenommen 
26.
	sDatei = File.Name
Hier wird die GesammtLinkNamen beschrieben:

01.
	If InStrRev(sDatei, ".") > 1 Then 
02.
	sDateiName = Left(sDatei, InStrRev(sDatei, ".") - 1) 'Namen isolieren 
03.
	sDateiTyp = Mid(sDatei, InStrRev(sDatei, ".")) 'Typ isolieren 
04.
	sDateiName = (Replace(sDateiName, "_", " ")) 
05.
	oGesammtLinkNamen.WriteLine sDateiName 
06.
	End If
Zum nächsten Absatz möchte ich noch wissen, wie die Zeile (Replace(sDateiName, "_", " ")) zu schreiben ist, weil ich die Ersetzungen ja schon oben für die GesammtLinkNamen gemacht habe. Wenn ich Replace aber einfach weglasse, bekomme ich eine Fehlermeldung.

01.
	If LCase(sDateiTyp) = ".php" Then 'nur PHP-Dateien 
02.
		LinkDat.AddNew 'neuen Datensatz erstellen 
03.
		LinkDat("URL") = sURLPfad &  SonderDatKonvert(sDatei) 'Feld "URL" befüllen 
04.
		LinkDat("LinkName") = SonderLinkKonvert(Replace(sDateiName, "_", " ")) 'Feld "LinkName" befüllen; dazu vorweg Sonderzeichen konvertieren 
05.
		LinkDat.Update '...  und Datensatz eintragen 
06.
		 
07.
	End If 
08.
Next
01.
'###### Die Datenbank enthält jetzt alle existierenden Dateien, wobei alle 
02.
'        bereits früher in der Liste vorhandenen doppelt eingetragen sind ###### 
03.
 
04.
LinkDat.Sort = "URL" 
05.
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForWriting, True) 'Zieldatei öffnen; ev bereits vorhandene Datei überschreiben 
06.
Set oLinkNamenNeu = fso.OpenTextFile(LinkNamenNeu, ForWriting, True) 
07.
LinkNamenNeu = "C:\skript2\Liste_verifizieren\LinkNamen.txt" 
08.
sPrevURL = "" 'Startwerte für Satzvergleich setzen 
09.
LinkDat.MoveFirst 'beim ersten Datensatz beginnen ... 
10.
Do Until LinkDat.EOF '... und bis zum letzten durchgehen 
11.
	'Unterschied zum vorhergehenden Datensatz? 
12.
	If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then 
13.
		'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben 
14.
		oEndergebnis.WriteLine "<p><a href=""" & _ 
15.
			LinkDat.Fields.Item("URL") & _ 
16.
			""">" & _ 
17.
			LinkDat.Fields.Item("LinkName") & _ 
18.
			"</a></p>" 
19.
			'letzte geschriebene Daten merken 
20.
		sPrevURL = LinkDat.Fields.Item("URL")
Hier versuche ich die LinkNamenNeu zu erfassen. Scheint aber nicht zu stimmen.

01.
	End If 
02.
	oLinkNamenNeu.WriteLine LinkDat.Fields.Item("LinkName") 
03.
	'nächsten Datensatz auswählen 
04.
	LinkDat.MoveNext 
05.
Loop 
06.
'Ausgabedatei schließen 
07.
oEndergebnis.Close 
08.
oLinkNamenNeu.Close

01.
'##################################### Ende des Hauptprogramms ##################################### 
02.
 
03.
'###### Funktion zum Konvertieren von SonderLink in Sonder ###### 
04.
Function SonderLinkSonderKonvert(sUnkonvertiert) 
05.
sTemp = sUnkonvertiert 
06.
SonderList.MoveFirst 
07.
Do While Not SonderList.EOF 
08.
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderLink"), SonderList.Fields.Item("Sonder")) 
09.
	SonderList.MoveNext 
10.
Loop 
11.
SonderLinkSonderKonvert = sTemp 
12.
End Function 
13.
 
14.
'###### Funktion zum Konvertieren von SonderDat in Sonder ###### 
15.
Function SonderDatSonderKonvert(sUnkonvertiert) 
16.
sTemp = sUnkonvertiert 
17.
SonderList.MoveFirst 
18.
Do While Not SonderList.EOF 
19.
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderDat"), SonderList.Fields.Item("Sonder")) 
20.
	SonderList.MoveNext 
21.
Loop 
22.
SonderDatSonderKonvert = sTemp 
23.
End Function 
24.
 
25.
'###### Funktion zum Konvertieren von Sonder in SonderLink ###### 
26.
Function SonderLinkKonvert(sUnkonvertiert) 
27.
sTemp = sUnkonvertiert 
28.
SonderList.MoveFirst 
29.
Do While Not SonderList.EOF 
30.
	sTemp = Replace(sTemp, SonderList.Fields.Item("Sonder"), SonderList.Fields.Item("SonderLink")) 
31.
	SonderList.MoveNext 
32.
Loop 
33.
SonderLinkKonvert = sTemp 
34.
End Function 
35.
 
36.
'###### Funktion zum Konvertieren von Sonder in SonderDat ###### 
37.
Function SonderDatKonvert(sUnkonvertiert) 
38.
sTemp = sUnkonvertiert 
39.
SonderList.MoveFirst 
40.
Do While Not SonderList.EOF 
41.
	sTemp = Replace(sTemp, SonderList.Fields.Item("Sonder"), SonderList.Fields.Item("SonderDat")) 
42.
	SonderList.MoveNext 
43.
Loop 
44.
SonderDatKonvert = sTemp 
45.
End Function
Bitte warten ..
Mitglied: bastla
12.09.2007 um 21:35 Uhr
Hallo Fraenky!

Leider ist die Datei LinkNamenNeu größer als die GesammtLinkNamen Datei. Kannst Du mir da mal meinen Fehler aufzeigen?
Ich nehme nicht an, dass Du den orthografischen Fehler ("Gesammt") meinst.

Zunächst wäre zu klären, welche Inhalte die beiden Dateien eigentlich haben sollten - dass in "LinkNamenNeu" sämtliche Links inkl Duplikate geschrieben werden, ist sicher nicht beabsichtigt, aber eine Konsequenz der Platzierung in der Schleife für alle Datenbankeinträge.

In die "GesammtLinkNamen"-Datei werden zunächst alle Namen der neu erstellten Dateien und danach (BTW: Das Schließen und Neu-Öffnen der Ausgabedatei hat in diesem Zusammenhang eigentlich keinen Sinn - im Gegenzug fehlt dann auch noch das nochmalige Schließen) alle Namen der insgesamt vorhandenen Dateien (also nicht nur der ".php"-Dateien) geschrieben (was dazu führt, dass die neu erstellten Dateien doppelt vorkommen und auch ev Dateinamen anderer Dateitypen enthalten sein können).

Nochmals daher die Frage: Was soll in die beiden Dateien?

Zum nächsten Absatz möchte ich noch wissen, wie die Zeile (Replace(sDateiName, "_", " ")) zu schreiben ist, weil ich die Ersetzungen ja schon oben für die GesammtLinkNamen gemacht habe. Wenn ich Replace aber einfach weglasse, bekomme ich eine Fehlermeldung.
Wenn nichts mehr zu ersetzen ist, kostet das "Replace" zwar etwas Laufzeit, schadet aber nicht - daher solltest Du es (zumindest bis zur Entscheidung, was wann in die beiden fraglichen Dateien geschrieben werden soll) dabei belassen.

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
12.09.2007 um 21:55 Uhr
Hallo bastla.
Wie die Namen schon ungefähr aussagen.
LinkNamenNeu = Alle Links, die neu erstellt wurden, weil mehr Dateien vorhanden waren; zum besseren Überblick.
VerlinkteDateienNeu = Alle neuen Dateien, weil mehr Links vorhanden waren; zum besseren Überblick.
GesammtLinkNamen = Alle vorhandenen LinkNamen zur eventuellen Weiterverarbeitung.

Wo und wie würdest Du denn die Daten auffangen, um die angesprochenen 3 Dateien zu befüllen?
Ich habe hier schon die Position verändert. hat den Output halbiert.
01.
If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then 
02.
		'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben 
03.
		oEndergebnis.WriteLine "<p><a href=""" & _ 
04.
			LinkDat.Fields.Item("URL") & _ 
05.
			""">" & _ 
06.
			LinkDat.Fields.Item("LinkName") & _ 
07.
			"</a></p>" 
08.
			'letzte geschriebene Daten merken 
09.
		sPrevURL = LinkDat.Fields.Item("URL") 
10.
		oLinkNamenNeu.WriteLine LinkDat.Fields.Item("LinkName") 
11.
	End If
und auch die Close Funktionen angepasst, was mich aber bei der Hauptherausvorderung auch nicht weiterbringt, weil ja auch noch keine Konvertierung stattgefunden hat und meine Versuche, das zu beheben, fehlgeschlagen sind.
Die LinkNameNeu Datei ist nur noch 4kb größer als GesamtLinkNamen Datei, was ja auch auf das andere Format zurückzuführen sein könnte
Grüße
Fraenky
Bitte warten ..
Mitglied: bastla
13.09.2007 um 00:15 Uhr
Hallo Fraenky!

LinkNamenNeu = Alle Links, die neu erstellt wurden, weil mehr Dateien vorhanden waren; zum besseren Überblick.
Mit der derzeitigen Programmlogik lassen sich diese Dateien nicht unmittelbar eruieren (da Datensätze, zu denen es kein Duplikat gibt, nicht gesondert ermittelt werden). Als Ansatz (falls wirklich notwendig) müsste ein Datensatz vorläufig zwischengespeichert werden, da erst nach Vergleich mit dem folgenden Satz feststellbar ist, ob es sich um ein Unikat handelt. Dieser Vergleich müsste für jeden geschriebenen Satz durchgeführt werden, um auch mehrere aufeinanderfolgende zusätzliche Links als "neu" zu identifizieren.

VerlinkteDateienNeu = Alle neuen Dateien, weil mehr Links vorhanden waren; zum besseren Überblick.
Anstelle des Schreibens in "GesamtLinkNamen" im Teil nach
01.
If Not fso.FileExists(sDateiMitPfad) Then 'existiert die Datei noch nicht, ...
platzieren.

GesamtLinkNamen = Alle vorhandenen LinkNamen zur eventuellen Weiterverarbeitung.
Unmittelbar nach dem Schreiben der vollständigen Link-Zeile mit
01.
oEndergebnis.WriteLine ...
nur den Linktext in "GesamtLinkNamen" schreiben.
Die LinkNameNeu Datei ist nur noch 4kb größer als GesamtLinkNamen Datei, was ja auch auf das andere Format zurückzuführen sein könnte
Eigentlich müsstest Du ja nur die Zeilenanzahl vergleichen ...

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
13.09.2007 um 15:19 Uhr
Hallo bastla.

Das habe ich ja schon in der E-Mail vermutet. Dieses Protokoll ist nicht wirklich nötig, sollte aber den Überblick über Änderungen ermöglichen.
Die Umsetzung bekomme ich alleine noch nicht hin.

werden). Als Ansatz (falls wirklich
notwendig) müsste ein Datensatz
vorläufig zwischengespeichert werden, da
erst nach Vergleich mit dem folgenden Satz
feststellbar ist, ob es sich um ein Unikat
handelt. Dieser Vergleich müsste

An der unten angesprochenden Stelle in Code habe ich versucht, einmal VerlinkteDateienNeu und einmal GesammtLinkNamen zu befüllen.

Anstelle des Schreibens in
"GesamtLinkNamen" im Teil nach
01.
If Not 
02.
> fso.FileExists(sDateiMitPfad) Then 
03.
> 'existiert die Datei noch nicht, ... 
04.
> 
platzieren.

Vielleicht hast Du beim flüchtigen Lesen übersehen ,das ich an dieser Stelle zwei Anweisungen eingesetzt hatte.

01.
If Not fso.FileExists(sDateiMitPfad) Then 'existiert die Datei noch nicht, ... 
02.
					Set oNeueDatei = fso.OpenTextFile(sDateiMitPfad, ForWriting, True) '... dann erstellen 
03.
					oVerlinkteDateienNeu.WriteLine oNeueDatei 
04.
					sDatei = Left(sDatei, InStrRev(sDatei, ".") - 1) 
05.
					oGesammtLinkNamen.WriteLine sDatei 
06.
					End If
Also müßte dieses ja erledigt sein.
GesammtLinkNamen wollte ich eigentlich dreimal befüllen.
Einmal bei den neu erstellten Dateien, einmal bei den neu erstellten Links und einmal bei den vorhandenen Links. Da aber die Programmstruktur das befüllen bei den neu erstellten Links nicht zuläßt, werde ich die Datei GesammtLinkNamen unten beim Aussortieren der Dopplungen durchführen. Bisher wird an dieser Stelle aber nur das Format SonderLink geliefert. Ich habe da verschiedene Variablen ausprobiert, habe aber nicht das gewünschte Ergebnis erzielen können.
Kannst Du mir da weiterhelfen?

> GesamtLinkNamen = Alle vorhandenen
LinkNamen zur eventuellen
Weiterverarbeitung.
Unmittelbar nach dem Schreiben der
vollständigen Link-Zeile mit
01.
oEndergebnis.WriteLine ... 
02.
> 
nur den Linktext in
"GesamtLinkNamen" schreiben.

Also meinst Du hier, das ich statt:

01.
If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then 
02.
		'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben 
03.
		oEndergebnis.WriteLine "<p><a href=""" & _ 
04.
			LinkDat.Fields.Item("URL") & _ 
05.
			""">" & _ 
06.
			LinkDat.Fields.Item("LinkName") & _ 
07.
			"</a></p>" 
08.
			'letzte geschriebene Daten merken 
09.
		sPrevURL = LinkDat.Fields.Item("URL") 
10.
		oLinkNamenNeu.WriteLine LinkDat.Fields.Item("LinkName") 
11.
	End If
01.
oGesammtLinkNamen.WriteLine
nehmen sollte. OK. Aber das Feld ("LinkName") liefert das Format SonderLink, ich brauche aber Format Sonder.

Eigentlich müsstest Du ja nur die
Zeilenanzahl vergleichen ...

Ja klar, aber ein Zähler ist ja noch nicht eingebaut und mit den kopierten Originaldaten nicht feststellbar, also nehme ich erst mal das, was direkt einsetzbar ist, in diesem Fall die Dateigröße.

Also eigentlich zum Schluß nur die Bitte an Dich, mir zu dem richtigen Format für oGesammtLinkNamen zu verhelfen.
Am besten mit dem richtigen Code.

Grüße
Fraenky
Bitte warten ..
Mitglied: bastla
13.09.2007 um 15:34 Uhr
Hallo Fraenky!

Vielleicht hast Du beim flüchtigen Lesen übersehen ,das ich an dieser Stelle zwei Anweisungen eingesetzt hatte.
Das nicht, aber ich hatte auf Deine Eigeninitiative gesetzt ...

Eigentlich müsstest Du ja nur die Zeilenanzahl vergleichen ...
Ja klar, aber ein Zähler ist ja noch nicht eingebaut und mit den kopierten Originaldaten nicht feststellbar ...
Dein Macromedia-Editor kann doch sicher Zeilennummern anzeigen ...

... das Feld ("LinkName") liefert das Format SonderLink, ich brauche aber Format Sonder.
Hatten wir nicht Functions zum Konvertieren in alle Richtungen? Eigentlich sollte
01.
oGesammtLinkNamen.WriteLine SonderLinkSonderKonvert(LinkDat.Fields.Item("LinkName"))
funktionieren.

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
13.09.2007 um 16:03 Uhr
Hallo bastla.

Eigentlich hatte ich die Konvertierung versucht, mit verschiedenen(weil es nicht funktionierte) Variablen durchzuführen, was, wie schon erwähnt, nicht klappte. War wohl falsche Syntax. oder so.
Aber Dein Code funktioniert wieder mal. Freude

Alles Klar und
Danke
Fraenky
Bitte warten ..
Mitglied: Fraenky
13.09.2007 um 16:36 Uhr
Hallo bastla.
Wenn Du mir jetzt noch den 2. Teil der Aufgabe in Code schreiben kannst, haben Wir mal wieder 100% erreicht.

Abfrage Linkliste aufteilen?

Nein = Ende

Ja =
Abfrage: Geben Sie die Anzahl der Dateien pro Ordner an.
Und nach Schema:
Die ersten x Dateien in den ersten Ordner, die zweiten x Dat in den zweiten usw.

Abfrage: Ordner fortlaufend Nummerieren oder Namen aus ListeNamenOrdner.txt einlesen?

Ja = fortlaufende Nummer Nein = Namen einlesen.

Abfrage: Dateien fortlaufend Nummerieren oder Namen aus LinkNamen erstellen?

Ja = fortlaufende Nummer Nein = Namen erstellen(Format = Sonder)

In beiden Fällen Datei anlegen mit Endung .php und den Link in die Datei reinschreiben, so das sonst nichts in der Datei steht, also kein Header, body usw.

Also liegt im Ordner "1" die Datei 1.php mit dem ersten Link der Liste als Inhalt.

Anschließend den Link zu der Datei 1.php in Protokolldatei = ProtokollNewNameLinklist reinschreiben

Istzustand: Arbeitsordner/1/Test.php
Link in ProtokollNewNameLinklist: 1/Test.php
Link in Datei 1.php: 1/Test.php

Grüße
Fränky
Bitte warten ..
Mitglied: Fraenky
13.09.2007 um 22:05 Uhr
Hallo bastla.
Kannst Du mir von hieraus weiterhelfen?

01.
Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True) 
02.
If MsgBox("Linkliste aufteilen?", vbYesNo) = vbYes Then LLA = True 
03.
If LLA Then  
04.
	ADO = InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd") 
05.
	Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat") 
06.
			If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then OFN = True 
07.
			IF OFN Then 'Erstelle in Arbeitsordner neue Ordner, Anzahl = AnzDatOrd. fortlaufend nummerierd 
08.
			Else	    ' Öffne ListeNamenOrdner, nimm erste Zeile Inhalt und benenne Ordner entsprechend 
09.
			End If 
10.
		 
11.
		If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True 
12.
			IF DFN Then 'Erstelle die Dateien mit Endung .php mit fortlaufender Nummerierung 
13.
						'Nimm Linkpfad aus LinkListe aus und schreibe in Datei. 
14.
						'Beispiel:<a href="../Pfad/Aben%E7a.php">Aben&ccedil;a</a> ohne <p></p> 
15.
						'Ersetze ../Pfad mit "PfadInDat" 
16.
						'Also im ersten Ordner liegen "AnzDatOrd". in zweiten usw. bis Ende LinkListe 
17.
						'Schreibe "PfadInDat" + Rest bis Datei in ProtokollNewDat 
18.
						'Beispiel: "PfadInDat"/!/1.php in oder "PfadInDat"/OrdnerName/LinkName.php 
19.
						 
20.
			Else		'Nimm LinkNamen und erstelle Datei im Ordner mit Endung .php Rest wie Yes 
21.
			End If 
22.
	else WScript.Quit(1) 
23.
End If 
24.
 
25.
'##################################### Ende des Hauptprogramms #####################################
Gruß
Fraenky
Bitte warten ..
Mitglied: Fraenky
16.09.2007 um 16:02 Uhr
Hallo bastla.
Versuche gerade, die Gesamtanzahl der Links in LinkListe festzustellen.
Dabei fiel mir der Unterschied in der Schleife je nach Position der Zählererhöhung auf.
Kann ich dadurch die Anzahl der neuer Links ermitteln oder was ist der Unterschied?
Brauche die Anzahl, um sie später durch Anzahl Ordner teilen zu können.

01.
	If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then 
02.
		'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben 
03.
		oEndergebnis.WriteLine "<p><a href=""" & _ 
04.
			LinkDat.Fields.Item("URL") & _ 
05.
			""">" & _ 
06.
			LinkDat.Fields.Item("LinkName") & _ 
07.
			"</a></p>" 
08.
			'letzte geschriebene Daten merken 
09.
		sPrevURL = LinkDat.Fields.Item("URL") 
10.
		oGesammtLinkNamen.WriteLine SonderLinkSonderKonvert(LinkDat.Fields.Item("LinkName")) 
11.
		icountero = icountero + 1 
12.
	End If 
13.
icountera = icountera + 1 
14.
	'nächsten Datensatz auswählen 
15.
	LinkDat.MoveNext 
16.
Loop 
17.
icountern = (icountera)-(icountero) 
18.
'Ausgabedatei schließen 
19.
oEndergebnis.Close 
20.
oGesammtLinkNamen.Close 
21.
'WScript.Echo "icountern &  neue Links" Warum funktioniert die Ausgabe so nicht? 
22.
WScript.Echo (icountern)
Kann ich also icountera als Gesammtanzahl der Links nehmen?
Und wie drücke ich
AnzOrd = (icountera) / (AnzDatOrd)
korrekt aus.
Jede Hilfestellung herzlich willkommen.
Gruß
Fraenky
Bitte warten ..
Mitglied: Fraenky
16.09.2007 um 18:40 Uhr
Hallo bastla.

Habe hier das Grundgerüßt etwas erweitert, komme aber nicht weiter.
Ich finde, das ich jetzt die Grundkonzeption und eine erste Struktur erstellt habe.
Was jetzt noch fehlt, ist Dein Glanz zwischen meinen Schleifen.
Laß doch mal Deine Finger über die Tastatur fliegen, damit Wir dieses Projekt erfolgreich abschließen können.

Der Code:
01.
'#########LinkListe aufteilen ######################################## 
02.
 
03.
Set oListeNamenOrdner = fso.OpenTextFile(ListeNamenOrdner, ForReading) 'Datei zum Lesen öffnen 
04.
 
05.
If MsgBox("Linkliste aufteilen?", vbYesNo) = vbYes Then LLA = True 
06.
If LLA Then  
07.
	Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat") 
08.
	ADO = InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd") 
09.
			If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then OFN = True 
10.
			IF OFN Then 'Erstelle in Arbeitsordner neue Ordner, Anzahl = AnzDatOrd. fortlaufend nummerierd 
11.
				AnzOrd = (icountera) / (AnzDatOrd) 
12.
				If icount < AnzOrd Then 
13.
					icount = icount + 1 
14.
					'Erstelle nummerierte Ordner im Arbeitsordner 
15.
					NeuOrd = fso.CreateFolder("icount"); 
16.
				End If 
17.
			Else	    ' Öffne ListeNamenOrdner, nimm erste Zeile Inhalt und benenne Ordner entsprechend 
18.
				Do While Not NeuOrd = oListeNamenOrdner.AtEndOfStream 
19.
					NeuOrd = fso.CreateFolder("oListeNamenOrdner"); 
20.
				 
21.
				Loop 
22.
			End If 
23.
		 
24.
		If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True 
25.
			'Prüfe Ordner im Arbeitsordner 
26.
			'Öffne ersten Ordner 
27.
 
28.
				IF DFN Then  
29.
					If icountz < AnzDatOrd Then 
30.
					icountz = icountz + 1 
31.
						'Erstelle die Dateien mit Endung .php mit fortlaufender Nummerierung 
32.
						'Beispiel: sPath/1/1-100.php, aPath/2/101-200 usw 
33.
						'Nimm Linkpfad und schreibe in Datei. 
34.
						'Beispiel: In Datei sPath/1/1 Liegt "PfadInDat"/!/1.php in oder "PfadInDat"/OrdnerName/LinkName.php 
35.
						'Also im ersten Ordner liegen "AnzDatOrd". in zweiten usw bis Ende LinkListe 
36.
						 
37.
				Else	'Nimm LinkNamen und erstelle Datei im Ordner mit Endung .php 
38.
		End If 
39.
	else WScript.Quit(1) 
40.
End If 
41.
 
42.
oListeNamenOrdner.close 
43.
 
44.
'##################################### Ende des Hauptprogramms #####################################
Danke und
m.f.G
Fraenky

P.S.
Ich lerne nebenbei noch Flash, Php, CMS und TYPO3.
Stelle also bitte nicht zu hohe Ansprüche an meine Auffassungsfähigkeiten. Ich lerne gerne, aber möchte vor allem vorranschreiten.
Bitte warten ..
Mitglied: bastla
16.09.2007 um 21:35 Uhr
Hallo Fraenky!

Kann ich also icountera als Gesammtanzahl der Links nehmen?
icountera = Anzahl Einträge (also inkl. Duplikate) in der Datenbank (müsste demnach am Ende dem Wert von LinkDat.RecordCount entsprechen)
icountero = Anzahl (geschriebener) Links
Brauche die Anzahl, um sie später durch Anzahl Ordner teilen zu können.
Es hat IMO eigentlich wenig Sinn, vorweg die Anzahl der Ordner zu berechnen oder die entsprechenden Ordner sogar zu erstellen - einfacher ist es, einen Ordner zu befüllen, und sobald dieser die vorgegebene Anzahl an Dateien enthält, den nächsten Ordner zu erstellen und zu befüllen, bis alle Dateien aufgeteilt sind.
01.
'WScript.Echo "icountern &  neue Links" Warum funktioniert die Ausgabe so nicht?
Du machst durch die umgebenden Anführungszeichen aus den beiden Teilen einen einzigen String. Richtig wäre es so:
01.
WScript.Echo icountern &  " neue Links"
Ganz richtig wäre es, nur Strings miteinander zu verketten, und daher vorweg die Zahl "icountern" in einen String umzuwandeln:
01.
WScript.Echo CStr(icountern) & "  neue Links"
Grüße
bastla
Bitte warten ..
Mitglied: bastla
16.09.2007 um 23:33 Uhr
Hallo Fraenky!

(Verständnis-)Fragen:

Wenn der Ordnername aus der ersten Zeile der Datei "ListeNamenOrdner" gelesen wird, so ist nur dieser eine Ordner zu erstellen und alle Dateien sind in diesen Ordner zu legen (ohne Aufteilung)? Oder soll der eingelesene Ordnername als Präfix für die laufende Nummer dienen und dennoch eine Aufteilung der Dateien vorgenommen werden?

Istzustand: Arbeitsordner/1/Test.php
Link in ProtokollNewNameLinklist: 1/Test.php
Link in Datei 1.php: 1/Test.php

Beispiel: In Datei sPath/1/1 Liegt "PfadInDat"/!/1.php in oder "PfadInDat"/OrdnerName/LinkName.php
Der einzugebende Pfad ("PfadInDat") wird zusammen mit dem Originaldateinamen in die neue Datei geschrieben (unabhängig davon, ob die Datei als Namen eine laufende Nummer erhält oder den Originalnamen trägt)?

Was soll in die Protokolldatei eingetragen werden - Vollständiger Link mit URL = Pfad/DateinameOderNummer.php und Linktext = Originaldateiname?

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
17.09.2007 um 14:08 Uhr
Hallo bastla.

Wenn der Ordnername aus der ersten Zeile der
Datei "ListeNamenOrdner" gelesen
wird, so ist nur dieser eine Ordner zu
erstellen und alle Dateien sind in diesen
Ordner zu legen (ohne Aufteilung)? Oder soll

Ich möchte hier einfach die Wahl haben, ob die Ordner durchnummeriert werden oder ob ich sie extra benennen kann. Das heißt, wenn ich sie extra benenne, das in diesen benannten Ordner die ersten z.B 100 Dateien (aus AnzDatOrd) erstellt werden und mit dem nächsten Namen der nächsten Reihe aus ListeNamenOrdner die nächste Anzahl aus AnzDatOrd. Falls zuwenig Namen in ListeNamenOrdner vorhanden, von oben die Namen der restlichen zu benennenen Ordner ergänzen. Ansonsten genauso mit nummerierten Ordnern verfahren.

der eingelesene Ordnername als Präfix
für die laufende Nummer dienen und
dennoch eine Aufteilung der Dateien
vorgenommen werden?

Nein. Entweder die Ordner laufend Nummerieren bis AnzOrd = (GesammtanzahlLinks) / (AnzDatOrd) +1 und mit AnzDatOrd befüllen.
oder die Ordner benennen und mit AnzDatOrd befüllen.

Der einzugebende Pfad
("PfadInDat") wird zusammen mit dem
Originaldateinamen in die neue Datei
geschrieben (unabhängig davon, ob die
Datei als Namen eine laufende Nummer
erhält oder den Originalnamen
trägt)?

Jain. Vorher noch den erstellten Ordner einfügen. PfadInDat/OrdnerNameoderZahl/DateiNameoderZahl.php
(Zur absoluten Pfaderstellung. In der Linkliste sind ja alles relative Pfade.)
Ich möchte hier die Wahl haben, ob die Dateien durchnummeriert werden oder ihren Originalnamen behalten.

Was soll in die Protokolldatei eingetragen
werden - Vollständiger Link mit URL =
Pfad/DateinameOderNummer.php und Linktext =
Originaldateiname?

Da brauche ich einfach den Pfad vom Arbeitsordner aus (sPath) ohne sPath, mit Präfix xxx also:
xxx/OrdnerNameoderZahl/DateiNameoderZahl.php.

Das xxx werde ich später manuell anpassen. Bin ja jetzt noch in der Vordenke der Webseite und möchte hier die Möglichkeit haben, die Dateien direck anzusprechen.

Danke auch für Deine Erläuterungen im zweiten Posting.

Grüße
Fraenky
Bitte warten ..
Mitglied: Fraenky
17.09.2007 um 15:59 Uhr
Hallo bastla.
Möchte hier noch mal den Pfad charakterisieren, der in die neue Datei abgelegt wird.
Er ist fast der selbe wie in der LinkListe, nur wird der erste Teil mit PfadInDat ersetzt.
Beispiel:
vorher: <a href="../../../..Pfad/Aben%E7a.php">Aben&ccedil;a</a>
Also ../../../..Pfad
mit PfadInDat ersetzen.
Natürlich ohne <p></p>
Hoffe, es ist jetzt etwas deutlicher geworden.
Der relative Pfad wird zum absoluten.
Gruß
Fraenky
Bitte warten ..
Mitglied: Fraenky
18.09.2007 um 11:07 Uhr
Hallo bastla.
Ja länger man über etwas nachdenkt, um so genauer kann ich es beschreiben.
Der Sinn der Aufteilung der LinkListe besteht darin, jeden Link in eine Datei abzuspeichern. Da die Links in der Liste mit relativem Pfad gespeichert sind, muß eine Umwandlung in einem absoluten Pfad mittels PfadInDat erfolgen, weil die späteren Aufrufe aus unterschiedlichen Ordnern erfolgen. Die minimale Anforderungen an das Script ist die Benennung der Ordner und Dateien( die den neuen absoluten Pfad enthalten) mit fortlaufenden Zahlen.
Die Benennung mit Namen ist optional und dienen einem zukünftigen, noch nicht genau erkennbaren, Einsatzzweck. Also kannst Du auch die bezüglichen Abfragen rausnehmen, wenn Du nur die Variante mit der fortlaufenden Nummerierung wählst.
In die Protokolldatei einfach nur die neuen Pfade mit Präfix bis zur neuen Datei reinschreiben.
Also Prafix/OrdnerNummer/Dateinummer.php
Und das ist es eigentlich schon.
Mit freundlichen Grüßen
Fraenky
Bitte warten ..
Mitglied: Fraenky
18.09.2007 um 20:28 Uhr
Hallo bastla.
Hörst Du mich nicht mehr oder

Willst Du nicht mehr mit mir Arbeiten, obwohl doch die Aufgabe mittlerweile eindeutig beschrieben ist und Du in dieser Hinsicht mein einziger Lichtblick bist?

Grüße
Fraenky
Bitte warten ..
Mitglied: bastla
18.09.2007 um 22:20 Uhr
Hallo Fraenky!

Da es momentan für mich etwas schwierig ist, konzentriert an der Fertigstellung zu arbeiten, muss ich das Testen des folgenden Entwurfes Dir überlassen:
01.
ProtokollNewDat = "C:\Skripts\ProtokollNewDat.txt" 
02.
If MsgBox("Linkliste aufteilen?", vbYesNo) <> vbYes Then WScript.Quit 
03.
 
04.
ADO = InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd") 
05.
Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat") 
06.
 
07.
PfadSonder = SonderDatConvert(Pfad) 'neuen Pfad  konvertieren (wird oft benötigt, daher einmalige Umwandlung hier) 
08.
If Not fso.FolderExists(sPath & "\" & Pfad) Then fso.CreateFolder(sPath & "\" & Pfad) 'Pfad erstellen 
09.
 
10.
'If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then Then OFN = True 
11.
OFN = True 'vorläufig nur Nummerierung implementiert 
12.
 
13.
'If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True 
14.
DFN = True 'vorläufig nur Nummerierung implementiert 
15.
 
16.
Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True) 'Protokolldatei für die neuen Dateien öffnen 
17.
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForReading) 'fertige Liste wieder einlesen 
18.
iONr = 0 'Ordnernummer initialisieren 
19.
iDNr = 0 'Dateinummer initialisieren 
20.
iDinO = ADO 'Zähler "Dateien in Ordner" so setzen, dass sofort ein Ordner erstellt werden muss 
21.
 
22.
Do While Not oEndergebnis.AtEndOfStream 
23.
	iDNr = iDNr + 1 'Dateinummer erhöhen 
24.
	iDinO = iDinO + 1 'Zähler "Dateien in Ordner" erhöhen 
25.
	If iDinO > ADO Then 'Ordner voll 
26.
		iDinO = 1 'Zähler "Dateien in Ordner" zurücksetzen 
27.
		If OFN Then 'nummerierte Ordner verwenden 
28.
			iONr = iONr + 1 'Ordnernummer erhöhen ... 
29.
			sOrdner = CStr(iONr) '... und als Namen des nächsten Ordners festlegen 
30.
		Else 
31.
			'Ordnername aus Liste - nicht implementiert 
32.
		End If 
33.
		If Not fso.FolderExists(sPath & "\" Pfad & "\" & sOrdner) Then 
34.
			fso.CreateFolder(sPath & "\" Pfad & "\" & sOrdner) 'Nächsten Ordner erstellen 
35.
		End If 
36.
	End If 
37.
	 
38.
	aZeile = Split(oEndergebnis.ReadLine, """") 'Linkzeile einlesen und aufteilen 
39.
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden  
40.
		If InStr(aZeile(2), "<") >= 2 Then 'Link-Text sollte OK sein 
41.
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<" 
42.
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">" 
43.
			If aZeile(1) <> "" Or sText <> "" Then 
44.
				sURL = PfadSonder & "/" & sOrdner& "/" & Mid(aZeile(1), InStrRev(aZeile(1), "\") + 1) 
45.
				'oder: sURL = PfadSonder & "/" & Mid(aZeile(1), InStrRev(aZeile(1), "\") + 1) 
46.
 
47.
				sDatName = CStr(iDNr) & ".php" 
48.
				sDatPfad = sPath & "\" & Pfad & "\" & sOrdner & "\" & sDatName 
49.
				fso.OpenTextFile(sDatPfad, ForWriting, True). _ 
50.
					Write "<a href=""" & sURL & """>" & sText & "</a>" 'Datei erstellen und Link gleich eintragen 
51.
				oProtokollNewDat.WriteLine PfadSonder & "/" & sOrdner & "/" & sDatName 
52.
			End If 
53.
		End If 
54.
	End If 
55.
Loop 
56.
oEndergebnis.Close 
57.
oProtokollNewDat.Close
Grüße
bastla

[Edit] Fehler bei Überprüfung auf bereits betehenden Zielordner korrigiert. [/Edit]
Bitte warten ..
Mitglied: Fraenky
19.09.2007 um 02:26 Uhr
Hallo bastla.

Ganz so Eindeutig wahr´s wohl doch noch nicht.
Danke für Deinen ersten Anlauf, der meine Undeutlichkeiten aufzeigt.

Sorry für die Begriffsverwirrung. Da das Script ja gewachsen ist, stellt sich jetzt eine gewisse nicht eindeutige Begriffsbezeichnung der Pfade herraus.

Da ich den PfadInDat im Format:
http://www.xyz/IrgendeinOrdner/NochIrgendeinOrdner/
eingebe, ist, denke ich, eine Behandlung des "PfadSonder = SonderDatConvert(Pfad)"mit SonderDatKonvert nicht nötig.

Weiterhin verstehe ich nicht, wie Du mit dieser Anweisung:
If Not fso.FolderExists(sPath & "\" & Pfad) Then fso.CreateFolder(sPath & "\" & Pfad)
den relativen Pfad der LinkListe zum absoluten Pfad machen willst. sPath ist der Arbeitsordner

( in dem dann auch die neuen durchnummerierten Ordner und in diese die durchnummerierten Dateien abgelegt werden und haben mit der Internetadresse, die in der neuen Datei(z.B. 1.php) abgelegt werden, nichts zu tuen )

und der Pfad ist der mit Abfrage eingegebene absolute Pfadteil, der den Anfang des relativen Pfadteils aus der LinkListe ersetzen soll.
Also aus
<a href="../../../../relativerPfad/Aben%E7a.php">aben&ccedil;a</a>
soll werden
<a href="http://www.xyz/IrgendeinOrdner/NochIrgendeinOrdner/Aben%E7a.php;&g ..."

Das bedeutet, das der erste Teil des relativen Pfades aus der LinkListe bis zum letzten "/", also :
../../../../relativerPfad
mit der manuellen über die Abfrage ermittelten PfadInDat(eigentlich "ersterTeildesPfadInDat") ersetzt werden soll.

Ergebniss abzüglich Tags:
http://www.xyz/IrgendeinOrdner/NochIrgendeinOrdner/Aben%E7a.php;&g ...

Dann aber im format Sonder - LinkName, also
http://www.xyz/IrgendeinOrdner/NochIrgendeinOrdner/Abençoa.php

Nur diese reine Internetadresse soll in der neu erstellten Datei liegen.


*Wir haben also verschiedene Pfade.
Einmal der Arbeitsordner sPath, in dem ja die einzelnen Dateien zur Verifizierung der LinkListe liegen und in dem jetzt noch die durchnummerierten Ordner mit den jeweiligen Dateien erstellt werden sollen.

*Dann haben Wir noch die relativen Pfade aus der LinkListe.

*Weiterhin haben Wir den manuell einzugebenen Pfad PfadInDat, der den relativen Pfad aus der LinkListe in eine Internetadresse umwandeln soll.

*Und zu guter letzt haben Wir den relativen Pfad zur durchnummerierten Datei vom Arbeitsordner aus mit Präfix, der in die Protokolldatei geschrieben werden soll. Also z.B. ein Eintrag: Präfix/21/65.php

Falls Du dies so in dem Script schon behandelt hast, dann habe ich es noch nicht richtig verstanden und konnte es auch in der Wirkung noch nicht betrachten, weil die Ausführung in Zeile 213

If Not fso.FolderExists(fso.CreateFolder(sPath & "\" Pfad & "\" & sOrdner)) Then

einen Kompilierungsfehler auswirft.

Grüße
Fraenky
Bitte warten ..
Mitglied: bastla
19.09.2007 um 07:19 Uhr
Hallo Fraenky!

... einen Kompilierungsfehler auswirft.
In diesem Fall war es (da der Fehler ganz offensichtlich war) nicht notwendig, die Fehlermeldung exakt anzugeben - ansonsten hilft dies uU entscheidend weiter ...

Die entsprechende Zeile ist zwar jetzt oben bereits korrigiert, die restlichen Änderungen folgen aber erst später.

Grüße
bastla
Bitte warten ..
Mitglied: bastla
20.09.2007 um 22:21 Uhr
Hallo Fraenky!

Nächster Versuch ...

Nur diese reine Internetadresse soll in der neu erstellten Datei liegen.
Also keine Tags? Falls dem so sein sollte, kannst Du das Einfügen der Tags ja sicher selbst aus dem Code entfernen.

01.
ProtokollNewDat = "C:\Skripts\ProtokollNewDat.txt" 
02.
If MsgBox("Linkliste aufteilen?", vbYesNo) <> vbYes Then WScript.Quit 
03.
 
04.
ADO = InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd") 
05.
Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat") 
06.
 
07.
'If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then Then OFN = True 
08.
OFN = True 'vorläufig nur Nummerierung implementiert 
09.
 
10.
'If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True 
11.
DFN = True 'vorläufig nur Nummerierung implementiert 
12.
 
13.
Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True) 'Protokolldatei für die neuen Dateien öffnen 
14.
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForReading) 'fertige Liste wieder einlesen 
15.
iONr = 0 'Ordnernummer initialisieren 
16.
iDNr = 0 'Dateinummer initialisieren 
17.
iDinO = ADO 'Zähler "Dateien in Ordner" so setzen, dass sofort ein Ordner erstellt werden muss 
18.
 
19.
Do While Not oEndergebnis.AtEndOfStream 
20.
	iDNr = iDNr + 1 'Dateinummer erhöhen 
21.
	iDinO = iDinO + 1 'Zähler "Dateien in Ordner" erhöhen 
22.
	If iDinO > ADO Then 'Ordner voll 
23.
		iDinO = 1 'Zähler "Dateien in Ordner" zurücksetzen 
24.
		If OFN Then 'nummerierte Ordner verwenden 
25.
			iONr = iONr + 1 'Ordnernummer erhöhen ... 
26.
			sOrdner = CStr(iONr) '... und als Namen des nächsten Ordners festlegen 
27.
		Else 
28.
			'Ordnername aus Liste - nicht implementiert 
29.
		End If 
30.
		If Not fso.FolderExists(sPath & "\" & sOrdner) Then 
31.
			fso.CreateFolder(sPath & "\" & sOrdner) 'Nächsten Ordner erstellen 
32.
		End If 
33.
	End If 
34.
	 
35.
	aZeile = Split(oEndergebnis.ReadLine, """") 'Linkzeile einlesen und aufteilen 
36.
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden  
37.
		If InStr(aZeile(2), "<") >= 2 Then 'Link-Text sollte OK sein 
38.
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<" 
39.
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">" 
40.
			If aZeile(1) <> "" Or sText <> "" Then 
41.
				sURL = Pfad & "/" & SonderLinkSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "\") + 1)) 
42.
 
43.
				sDatName = CStr(iDNr) & ".php" 
44.
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName 
45.
				fso.OpenTextFile(sDatPfad, ForWriting, True). _ 
46.
					Write "<a href=""" & sURL & """>" & sText & "</a>" 'Datei erstellen und Link gleich eintragen 
47.
				oProtokollNewDat.WriteLine PfadSonder & "/" & sOrdner & "/" & sDatName 
48.
			End If 
49.
		End If 
50.
	End If 
51.
Loop 
52.
oEndergebnis.Close 
53.
oProtokollNewDat.Close
Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
22.09.2007 um 22:57 Uhr
Hallo bastla.
Mir schwirrt gerade etwas der Kopf wegen der vielen neuen Infos bezüglich der oben angesprochenden Themengebiete und ich hoffe, das sich das Bild bald konkretisiert.
Nur Typo 3 werde ich sicherlich nicht einsetzen, ist ja hochkomplex, schwierig einzurichten und einen Bestand einzupflegen, wenns läuft ist es sicherlich nicht schlecht, aber meine Datenstrucktur braucht kein Typo3.
Darum möchte ich Dich bitten, um vorranzuschreiten keine über meine normalen Logikfähigkeiten hinausgehenden Eigenschaften abzufragen, weil mir das alles jetzt zu viel wird. Ich währe Dir dankbar, wenn Du den Code dahingehend erweiterst, das die Ordner mit den Dateien mit dem normalen Weblink angelegt werden. Momentan ist der Stand der Dinge, das die Dateien umbenannt werden, aber noch keine Ordner angelegt werden. Der Link in den Ordnern stimmt noch nocht, weil PfadInDat mit dem letzten schon spezifizierten Teil der LinkListe zu ergänzen ist.
Wie gesagt, brauche ich VBS nicht direckt für den Betrieb der Webseite, sondern wird von mir für die Vorbereitung der Daten eingesetzt. Und in diesem Sinne muß ich nicht unbedingt alles verstanden haben, da reichen erstmal lauffähige, die Aufgabenstellung erfüllende Scripte, die ich ja später immer noch analysieren kann, wenn´s um Modifizierungen geht.
Es dauert mir einfach jetzt zu lange, bis ich das alles genau verstanden habe.
Ich habe schon ziemlich viele Vorarbeiten gemacht und möchte auch mal fertig werden.
Währe schön, wenn Du mir dabei weiterhin hillfst, wie Du es ja bisher schon getan hast.
Viele Grüße
Fraenky
Bitte warten ..
Mitglied: bastla
23.09.2007 um 12:12 Uhr
Hallo Fraenky!

Versuch es mit dieser Version:
01.
ProtokollNewDat = "C:\Skripts\ProtokollNewDat.txt" 
02.
 
03.
If MsgBox("Linkliste aufteilen?", vbYesNo) <> vbYes Then WScript.Quit 
04.
 
05.
ADO = CInt(InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd")) 
06.
If ADO <= 0 Then WScript.Quit 
07.
 
08.
Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat") 
09.
 
10.
'If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then Then OFN = True 
11.
OFN = True 'vorläufig nur Nummerierung implementiert 
12.
 
13.
'If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True 
14.
DFN = True 'vorläufig nur Nummerierung implementiert 
15.
 
16.
Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True) 'Protokolldatei für die neuen Dateien öffnen 
17.
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForReading) 'fertige Liste wieder einlesen 
18.
iONr = 0 'Ordnernummer initialisieren 
19.
iDNr = 0 'Dateinummer initialisieren 
20.
iDinO = ADO 'Zähler "Dateien in Ordner" so setzen, dass sofort ein Ordner erstellt werden muss 
21.
 
22.
Do While Not oEndergebnis.AtEndOfStream 
23.
	iDNr = iDNr + 1 'Dateinummer erhöhen 
24.
	iDinO = iDinO + 1 'Zähler "Dateien in Ordner" erhöhen 
25.
	If iDinO > ADO Then 'Ordner voll 
26.
		iDinO = 1 'Zähler "Dateien in Ordner" zurücksetzen 
27.
		If OFN Then 'nummerierte Ordner verwenden 
28.
			iONr = iONr + 1 'Ordnernummer erhöhen ... 
29.
			sOrdner = CStr(iONr) '... und als Namen des nächsten Ordners festlegen 
30.
		Else 
31.
			'Ordnername aus Liste - nicht implementiert 
32.
		End If 
33.
		If Not fso.FolderExists(sPath & "\" & sOrdner) Then 
34.
			fso.CreateFolder(sPath & "\" & sOrdner) 'Nächsten Ordner erstellen 
35.
		End If 
36.
	End If 
37.
	 
38.
	aZeile = Split(oEndergebnis.ReadLine, """") 'Linkzeile einlesen und aufteilen 
39.
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden  
40.
		If InStr(aZeile(2), "<") >= 2 Then 'Link-Text sollte OK sein 
41.
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<" 
42.
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">" 
43.
			If aZeile(1) <> "" Or sText <> "" Then 
44.
				sURL = Pfad & "/" & SonderLinkSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1)) 
45.
				sDatName = CStr(iDNr) & ".php" 
46.
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName 
47.
				fso.OpenTextFile(sDatPfad, ForWriting, True). _ 
48.
					Write "<a href=""" & sURL & """>" & sText & "</a>" 'Datei erstellen und Link gleich eintragen 
49.
					'Write  sURL 'Version ohne Tags/Linkschreibweise 
50.
				oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName 
51.
			End If 
52.
		End If 
53.
	End If 
54.
Loop 
55.
oEndergebnis.Close 
56.
oProtokollNewDat.Close
Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
23.09.2007 um 20:48 Uhr
Ja hallo bastla.
Da kommen Wir der Sache doch schon sehr näher. Die Struktur stimmt, als einziges muß noch der Link in den Dateien nachjustiert werden.
Habe ich mit:

01.
If aZeile(1) <> "" Or sText <> "" Then 
02.
				sURL = Pfad & "/" & SonderLinkSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1)) 
03.
				sDatName = CStr(iDNr) & ".php" 
04.
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName 
05.
				sDatName = SonderDatSonder (sDatName) 
06.
				fso.OpenTextFile(sDatPfad, ForWriting, True). _ 
07.
					Write sURL 'Version ohne Tags/Linkschreibweise 
08.
				oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName 
09.
			End If
versucht, den Dateinamen :

http://www.test.de/%C1gua.php

von SonderDat nach Sonder zu konvertieren, sagt mit das Script aber was von einer "Typen Unverträglich" SonderDatSonder.
Scheint eine Felddeklaration dem entgegenzustehen?

Ansonsten schon fast fertig.

Gruß
Fraenky
Bitte warten ..
Mitglied: bastla
23.09.2007 um 21:15 Uhr
Hallo Fraenky!

Du wirst sicher einen Grund haben, einen Dateinamen wie "1.php" zu konvertieren ...

... was auch klappen sollte, wenn Du die Function "SonderDatSonderKonvert()" dafür verwendest.

Grüße
bastla
Bitte warten ..
Mitglied: Fraenky
23.09.2007 um 23:37 Uhr
Hallo bastla.
Gute Idee übrigens, die Abfragen als Schalter über die Kommentierung zu regeln.
War natürlich nicht beabsichtigt, den Dateinamen zu konvertieren, sondern den LinkTeil, nur finde ich da irgendwie noch nicht den richtigen Ansatz.
Vorher wollte ich eigentlich hier ansetzen:

sURL = Pfad & "/" & SonderLinkSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1))

Und zwar nicht mit SonderLinkSonderKonvert. sondern mit SonderDatSonder, weil ja das Sonderformat der Dateienschreibweise in html in das Format Sonder konvertiert werden soll, hat aber auch nicht geklappt.

01.
If aZeile(1) <> "" Or sText <> "" Then 
02.
				sURL = Pfad & "/" & SonderDatSonder(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1)) 
03.
				sDatName = CStr(iDNr) & ".php" 
04.
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName 
05.
				fso.OpenTextFile(sDatPfad, ForWriting, True). _ 
06.
					Write sURL 'Version ohne Tags/Linkschreibweise 
07.
				oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName 
08.
			End If
Also ich weiß da erstmal nicht weiter.

Gruß
Fraenky
Bitte warten ..
Mitglied: Fraenky
24.09.2007 um 00:42 Uhr
Hallo bastla.
Dies paßt schon mal besser.

01.
If aZeile(1) <> "" Or sText <> "" Then 
02.
				sURL = Pfad & "/" & SonderDatSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1)) 
03.
				sDatName = CStr(iDNr) & ".php" 
04.
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName 
05.
				fso.OpenTextFile(sDatPfad, ForWriting, True). _ 
06.
					Write sURL 'Version ohne Tags/Linkschreibweise 
07.
				oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName 
08.
			End If
Aber leider wird der Ordner nicht mitgeliefert.
Folgendes klappt leider nicht:

01.
If aZeile(1) <> "" Or sText <> "" Then 
02.
				sURL = Pfad & "/" & sOrdner & "/" SonderDatSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1)) 
03.
				sDatName = CStr(iDNr) & ".php" 
04.
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName 
05.
				fso.OpenTextFile(sDatPfad, ForWriting, True). _ 
06.
					Write sURL 'Version ohne Tags/Linkschreibweise 
07.
				oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName 
08.
			End If
Anweisungsende wird erwartet. Hätte sOrdner geklappt, währe die Konvertierung dran gewesen.
Aber so.
Gruß
Fraenky
Bitte warten ..
Mitglied: Biber
24.09.2007 um 07:00 Uhr
Moin Fraenky,

Bitte ergänze am Ende meiner angefangenen Zeile..
01.
... 
02.
sURL = Pfad & "/" & sOrdner & "/" .....
... dort, wo die Pünktchen stehen das in Deinem Sourcecode fehlende "&".

01.
sURL = Pfad & "/" & sOrdner & "/"  & SonderDatSonderKonvert( bla........)
Grüße
Biber
Bitte warten ..
Mitglied: Fraenky
24.09.2007 um 13:28 Uhr
Hallo Biber.

Ach so, ja, das Script will´s natürlich genau wissen. Jetzt, wo Du´s sagst, springt es einem natürlich sofort in die Augen. Und eine Konvertierung ist ja auch erst im Falle der Namensgebung der Ordner nötig.
Danke allso Biber.


Hallo bastla.

Haben Wir es also wieder einmal geschaft, die verschiedenen Herrausvorderungen des Brain to Brain zu meistern.
Nach den letzten kleineren Änderungen läuft und läuft und läuft das Script und macht, was es sollte.
Astrein. Super. Spitze.
Danke bastla, weiter so, Du "Robin Hood" des VBS.
(Nimmst nicht den Reichen, schöpfst aber aus tiefen Quellen und gibst freigibig denen, die nicht so tief kommen)
Viele Grüße
Fraenky
Bitte warten ..
Mitglied: bastla
24.09.2007 um 13:39 Uhr
Hallo Fraenky!

... läuft das Script und macht, was es sollte.
... dann könntest Du ja den Beitrag als "erledigt" kennzeichnen ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Humor (lol)
Linkliste für Adventskalender (3)

Information von nikoatit zum Thema Humor (lol) ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Virtualisierung
gelöst Interne Netzwerke untereinander kommunizieren lassen (9)

Frage von chelewae zum Thema Virtualisierung ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...