Top-Themen

Aktuelle Themen (A bis Z)

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.

Mitglied: Fraenky

Fraenky (Level 1) - Jetzt verbinden

28.08.2007, aktualisiert 24.09.2007, 10931 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.
MfG
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 ..
Ähnliche Inhalte
Netzwerkmanagement
Fernwartungssoftware intern
Frage von inno-itNetzwerkmanagement11 Kommentare

Hallo Zusammen, wir nutzen im Unternehmen aktuell zur Fernwartung der internen Rechner Lansweeper. Die Software kopiert bei Verbindungsaufbau UVNC ...

Monitoring
Netzwerkmonitoring - Netzwerktest intern
gelöst Frage von DaPeddaMonitoring13 Kommentare

Hallo zusammen, ich möchte unser internes Netz Monitoren / testen um vorhandene Qualitätsunterschiede bei VoIP auf der Spur zu ...

Ausbildung
IT-Workshop Intern
Frage von KylanXAusbildung9 Kommentare

Hey liebe Community, ich habe mich jetzt tagelang durch das Internet geforstet und nach Themen zu internen IT-Workshops gesucht ...

Humor (lol)

Administrator Intern, gekonntes Antimarketing

Frage von certifiedit.netHumor (lol)19 Kommentare

Guten Morgen liebe Programmierer! na, wen spricht diese Aufmachung auch so an? :-) LG

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 2 TagenHumor (lol)5 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 3 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 7 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 7 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
PCIe 1.0 Grafikkarte für 3840x2160
Frage von Windows10GegnerGrafikkarten & Monitore30 Kommentare

Hallo, mein Vater hat einen neuen Monitor gekauft, welcher eine native Auflösung von 3840*2160 hat. Diese muss jetzt auch ...

Windows Server
Dienstnamen und oder Deutsche und Englische Beschreibung in services.msc gleichzeitig anzeigen
gelöst Frage von vafk18Windows Server23 Kommentare

Guten Morgen, die Suche nach Diensten in services.msc gestaltet sich immer wieder schwierig, weil mir je nach Aufgabe die ...

Windows 10
Windows Enterprise 1809 Eval nicht bootbar
Frage von Sunny89Windows 1022 Kommentare

Hallo zusammen, bevor ich mich jetzt noch stundenlang rumärger wollte ich euch fragen, ob Ihr die gleichen Probleme habt ...

JavaScript
Javascript: WebSql
gelöst Frage von internet2107JavaScript14 Kommentare

Guten Morgen zusammen, zunächst einmal einen schönen dritten Advent. Ich habe ein Problem mit Javascript und WebSQL. Bisher habe ...