fraenky
Goto Top

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

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

Content-Key: 67337

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

Ausgedruckt am: 28.03.2024 um 18:03 Uhr

Mitglied: Fraenky
Fraenky 02.09.2007 um 17:27:48 Uhr
Goto Top
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:
Arbeitsordner = "C:\skript\" 'Arbeitsordner  
'sPath = auch Arbeitsordner  
'Also einmal als Default wert in der Variablen definiert  
'einmal ber Explorerfenster ausgew„hlt  
VerlinkteDateien = "C:\skript\test\VerlinkteDateien.txt"  

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set fso = CreateObject("Scripting.FileSystemObject")  
If WScript.Arguments.Count > 0 Then
	sArg = WScript.Arguments(0)
	If fso.FileExists(sArg) Then 'Aufruf mit šbergabe einer Datei  
		sPath = fso.GetFile(sArg).Path
		sPath = Left(sPath, InStrRev(sPath, "\") - 1)  
	Else 'oder ev eines Ordners  
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path
	End If
End If
If sPath = "" Then 'Kein (gltiger) Pfad bergeben, daher Dialog  
	Set oFolder = CreateObject("Shell.Application") _  
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17)  
	If TypeName(oFolder) = "Nothing" Then  
		sPath = Arbeitsordner
	Else
		sPath = oFolder.Self.Path
	End If
End If
'WScript.Echo sPath  
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen  
'WScript.Echo Folder  
Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Verbindung  
'zur geöffneten VerlinkteDateien.txt herrgestellt.  
For Each File in Folder.Files               'Hier für jede Datei in Arbeitsordner   
	oVerlinkteDateien.WriteLine File.Name    ' der Name in neuer Zeile geschrieben.  
Next
oVerlinkteDateien.Close                     '  Der Zugriff auf Datei wird beendet/ gespeichert  
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
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:
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind  
'sPath = auch Arbeitsordner  
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt"  
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt"  
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt"  
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt"'Hier kommt noch nix an  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True)
Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen  
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben  
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen  
Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Verbindung  
'zur geöffneten VerlinkteDateien.txt herrgestellt.  


Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const adVarChar = 200'Datenbankfelder  
Const MaxCharacters = 255
Const adFldIsNullable = 32

DataList.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren  
DataList.Fields.Append "Text", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren  
DataList.Open



lInCounter = 0
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen  
	lInCounter = lIncounter + 1
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile:  
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen)  
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen)  
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen)  

		'Zerlegung des 3. Teiles:  
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text  
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """")  
		Else
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"  
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"  
			If aZeile(1) <> "" Or sText <> "" Then  
				DataList.AddNew 'neuen Datensatz erstellen  
				DataList("URL") = aZeile(1) 'Feld "URL" befüllen  
				DataList("Text") = sText    'Feld "Text" befüllen   
				DataList.Update '...  und Datensatz eintragen   
			Else
				'Eintrag in das Protokoll:  
					'Alle Teile zusammenfassen,  
					'dabei die entfernten Anführungszeichen wieder einfügen und  
					'Zeile in Protokolldatei schreiben  
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """")  
			End If
		End If
	Else
		'anderer Zeilenaufbau - wäre näher zu untersuchen  
		'zumindest Protokolleintrag erstellen  
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """")  
	End If
Loop
DataList.MoveFirst 'beim ersten Datensatz beginnen ...  

			oLinkNamen.WriteLine 
			DataList.Fields.Item("Text")  
			DataList.MoveNext
			oLinkNamen.Close

'Hier sollte doch in Datei die Linknamen geschrieben werden. Tut sich aber nix.  
'Und die untere Abfrage findet nicht mehr statt.  

If WScript.Arguments.Count > 0 Then
	sArg = WScript.Arguments(0)
	If fso.FileExists(sArg) Then 'Aufruf mit šbergabe einer Datei  
		sPath = fso.GetFile(sArg).Path
		sPath = Left(sPath, InStrRev(sPath, "\") - 1)  
	Else 'oder ev eines Ordners  
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path
	End If
End If
If sPath = "" Then 'Kein (gltiger) Pfad bergeben, daher Dialog  
	Set oFolder = CreateObject("Shell.Application") _  
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17)  
	If TypeName(oFolder) = "Nothing" Then  
		sPath = Arbeitsordner
	Else
		sPath = oFolder.Self.Path
	End If
End If
For Each File in Folder.Files'Hier für jede Datei in Arbeitsordner der Pfad abgelegt.  
sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind).  
oVerlinkteDateien.WriteLine Replace(sNameTemp, "_", " ") 'Ersetzen von "_" mit " "  
Next
oVerlinkteDateien.Close
Edit end
Mitglied: bastla
bastla 04.09.2007 um 00:48:41 Uhr
Goto Top
Hallo Fraenky!

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

In diesem zugegebenermaßen seltenen Fall: Dateiname.txt.php
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 face-wink): 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
Mitglied: Fraenky
Fraenky 04.09.2007 um 15:33:47 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 04.09.2007 um 21:42:27 Uhr
Goto Top
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:
DataList.MoveFirst 'beim ersten Datensatz beginnen ...  

			DataList.Fields.Item("Text")  
			oLinkNamen.WriteLine (DataList.Fields.Item("Text"))  
			DataList.MoveNext
			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
Mitglied: bastla
bastla 04.09.2007 um 22:45:12 Uhr
Goto Top
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:
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True)

DataList.MoveFirst
Do While Not DataList.EOF 'Schleifenkopf  
	oLinkNamen.WriteLine DataList.Fields.Item("Text")  
	DataList.MoveNext
Loop 'Schleifenfuß  

oLinkNamen.Close

Grüße
bastla
Mitglied: Fraenky
Fraenky 04.09.2007 um 23:25:14 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 05.09.2007 um 00:15:41 Uhr
Goto Top
Hallo bastla.
Hier die neue Datenbank ohne Abfrage.
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt"  
Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForWriting, True)
Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
DataList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable  
DataList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable  
DataList.Fields.Append "SonderNam", adVarChar, MaxCharacters, adFldIsNullable  
DataList.Open
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True)
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oLinkListe.ReadLine, ",") 'Zeile einlesen und an dem Komma zerteilen  
	lInCounter = lIncounter + 1
	If UBound(aZeile) = 2 Then '2 Kommas gefunden - 3 Teile:  
		'1. Teil = aZeile(0): Sonder  
		'2. Teil = aZeile(1): SonderDat  
		'3. Teil = aZeile(2): SonderNam  

			
Bis jetzt sind doch die Sonderzeichen in die Datenbank eingelesen, gesplitter und benannt.
Wie erfolgt den jetzt die Überprüfung der LinkNamen.txt ?
Loop

Gruß
Fraenky
Mitglied: Fraenky
Fraenky 05.09.2007 um 13:39:04 Uhr
Goto Top
Hallo bastla.
Habe jetzt die Datenbank eingebaut und eine Anweisung eingebaut.
Bekomme aber Fehlermeldungen.
Kannst Du mal Dein Adlerauge schweifen lassen?
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind  
'sPath = auch Arbeitsordner  
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt"  
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt"  
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt"  
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt"  
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt"  

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set fso = CreateObject("Scripting.FileSystemObject")  
Const adVarChar = 200'Datenbankfelder  
Const MaxCharacters = 255
Const adFldIsNullable = 32

Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading, false)
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True)
Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
DataList.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren  
DataList.Fields.Append "Text", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren  
DataList.Open

Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
DataList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable  
DataList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable  
DataList.Fields.Append "SonderNam", adVarChar, MaxCharacters, adFldIsNullable  
DataList.Open

For Each Line in LinkNamen'  
oLinkNamen.WriteLine Replace("SonderNam", "Sonder")  
Next


Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True)
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oLinkListe.ReadLine, ",") 'Zeile einlesen und an dem Komma zerteilen  
	lInCounter = lIncounter + 1
	If UBound(aZeile) = 2 Then '2 Kommas gefunden - 3 Teile:  
		'1. Teil = aZeile(0): Sonder  
		'2. Teil = aZeile(1): SonderDat  
		'3. Teil = aZeile(2): SonderNam  


Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen  
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben  
lInCounter = 0
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen  
	lInCounter = lIncounter + 1
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile:  
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen)  
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen)  
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen)  

		'Zerlegung des 3. Teiles:  
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text  
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """")  
		Else
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"  
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"  
			If aZeile(1) <> "" Or sText <> "" Then  
				DataList.AddNew 'neuen Datensatz erstellen  
				DataList("URL") = aZeile(1) 'Feld "URL" befüllen  
				DataList("Text") = sText    'Feld "Text" befüllen   
				DataList.Update '...  und Datensatz eintragen   
			Else
				'Eintrag in das Protokoll:  
					'Alle Teile zusammenfassen,  
					'dabei die entfernten Anführungszeichen wieder einfügen und  
					'Zeile in Protokolldatei schreiben  
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """")  
			End If
		End If
	Else
		'anderer Zeilenaufbau - wäre näher zu untersuchen  
		'zumindest Protokolleintrag erstellen  
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """")  
	End If
Loop
DataList.MoveFirst 'beim ersten Datensatz beginnen ...  
Do While Not DataList.EOF 'Schleifenkopf  
			oLinkNamen.WriteLine DataList.Fields.Item("Text")  
			DataList.MoveNext
			Loop 'Schleifenfuß  

If WScript.Arguments.Count > 0 Then
	sArg = WScript.Arguments(0)
	If fso.FileExists(sArg) Then 'Aufruf mit šbergabe einer Datei  
		sPath = fso.GetFile(sArg).Path
		sPath = Left(sPath, InStrRev(sPath, "\") - 1)  
	Else 'oder ev eines Ordners  
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path
	End If
End If
If sPath = "" Then 'Kein (gltiger) Pfad bergeben, daher Dialog  
	Set oFolder = CreateObject("Shell.Application") _  
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17)  
	If TypeName(oFolder) = "Nothing" Then  
		sPath = Arbeitsordner
	Else
		sPath = oFolder.Self.Path
	End If
End If
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen  
Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Verbindung  
'zur geöffneten VerlinkteDateien.txt herrgestellt.  
For Each File in Folder.Files'Hier für jede Datei in Arbeitsordner der Pfad abgelegt.  
sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind).  
oVerlinkteDateien.WriteLine Replace(sNameTemp, "_", " ") 'Ersetzen von "_" mit " "  
Next
oVerlinkteDateien.Close
oLinkNamen.Close
oSonderzeichen.Close
oProtokoll.Close
oLinkListe.Close

Gruß
Fraenky
Mitglied: bastla
bastla 05.09.2007 um 14:53:04 Uhr
Goto Top
Hallo Fraenky!

Zum Testen fehlt mir momentan die Zeit, daher nur als Entwurf:
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind  
'sPath = auch Arbeitsordner  
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt"  
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt"  
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt"  
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt"  
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Const ForReading = 1, ForWriting = 2, ForAppending = 8

'###### Argumente prüfen - Pfad festlegen ######  
If WScript.Arguments.Count > 0 Then
	sArg = WScript.Arguments(0)
	If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei  
		sPath = fso.GetFile(sArg).Path
		sPath = Left(sPath, InStrRev(sPath, "\") - 1)  
	Else 'oder ev eines Ordners  
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path
	End If
End If
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog  
	Set oFolder = CreateObject("Shell.Application") _  
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17)  
	If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden  
		sPath = Arbeitsordner
	Else
		sPath = oFolder.Self.Path
	End If
End If

Const adVarChar = 200'Datenbankfelder  
Const MaxCharacters = 255
Const adFldIsNullable = 32

'###### Sonderzeichen-Datenbank aufbauen und befüllen ######  
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Fields.Append "SonderNam", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Open

Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading)
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen  
	If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar  
		SonderList.AddNew
		SonderList("Sonder") = aZeile(0)  
		SonderList("SonderDat") = aZeile(1)  
		SonderList("SonderNam") = aZeile(2)  
		SonderList.Update
	End If
Loop
oSonderzeichen.Close

'###### Link-Datenbank aufbauen und befüllen ######  
Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
DataList.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren  
DataList.Fields.Append "Text", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren  
DataList.Open

Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben  

Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen  
lInCounter = 0
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen  
	lInCounter = lIncounter + 1
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile:  
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen)  
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen)  
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen)  

		'Zerlegung des 3. Teiles:  
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text  
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """")  
		Else
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"  
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"  
			If aZeile(1) <> "" Or sText <> "" Then  
				DataList.AddNew 'neuen Datensatz erstellen  
				DataList("URL") = aZeile(1) 'Feld "URL" befüllen  
				DataList("Text") = SonderKonvert(sText)    'Feld "Text" befüllen; dazu vorweg Sonderzeichen konvertieren  
				DataList.Update '...  und Datensatz eintragen   
			Else
				'Eintrag in das Protokoll:  
					'Alle Teile zusammenfassen,  
					'dabei die entfernten Anführungszeichen wieder einfügen und  
					'Zeile in Protokolldatei schreiben  
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """")  
			End If
		End If
	Else
		'anderer Zeilenaufbau - wäre näher zu untersuchen  
		'zumindest Protokolleintrag erstellen  
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """")  
	End If
Loop
oLinkListe.Close

oProtokoll.Close

'###### Linknamen in Datei schreiben ######  
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True)

DataList.MoveFirst 'beim ersten Datensatz beginnen ...  
Do While Not DataList.EOF
	oLinkNamen.WriteLine DataList.Fields.Item("Text")  
	DataList.MoveNext
Loop
oLinkNamen.Close

'###### Dateinamen einlesen und (ggf berichtigt) in Datei schreiben ######  
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen  

Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Datei "VerlinkteDateien.txt" geöffnet.  

For Each File in Folder.Files 'Hier wird für jede Datei in Arbeitsordner der Name abgelegt.  
	sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind).  
	oVerlinkteDateien.WriteLine Replace(sNameTemp, "_", " ") 'Ersetzen von "_" mit " "  
Next
oVerlinkteDateien.Close


'##################################### Ende des Hauptprogramms #####################################  


'###### Funktion zum Konvertieren von Sonderzeichen ######  
Function SonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderNam"), SonderList.Fields.Item("Sonder"))  
	SonderList.MoveNext
Loop
SonderKonvert = sTemp
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
Mitglied: Fraenky
Fraenky 05.09.2007 um 18:25:19 Uhr
Goto Top
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?
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderNam"), SonderList.Fields.Item("Sonder"))  
	SonderList.MoveNext
Loop
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
Mitglied: bastla
bastla 05.09.2007 um 19:19:53 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 05.09.2007 um 21:20:09 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 06.09.2007 um 00:50:40 Uhr
Goto Top
Hallo bastla.
Hier ein erster Versuch, die Datenbänke zusammenzufassen. Leider kommt eine Fehlermeldung gerade auf die Zeile:
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
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind sPath = auch Arbeitsordner  
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt"  
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt"  
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt"  
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt"  
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Const ForReading = 1, ForWriting = 2, ForAppending = 8

'###### Argumente prüfen - Pfad festlegen ######  
If WScript.Arguments.Count > 0 Then
	sArg = WScript.Arguments(0)
	If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei  
		sPath = fso.GetFile(sArg).Path
		sPath = Left(sPath, InStrRev(sPath, "\") - 1)  
	Else 'oder ev eines Ordners  
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path
	End If
End If
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog  
	Set oFolder = CreateObject("Shell.Application") _  
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17)  
	If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden  
		sPath = Arbeitsordner
	Else
		sPath = oFolder.Self.Path
	End If
End If

'###### Dateinamen einlesen und (ggf berichtigt) in Datei schreiben ######  
'Hier könnte eigentlich Spalte VerliDat der Datenbank befüllt werden.  
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen  
Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Datei "VerlinkteDateien.txt" geöffnet.  
For Each File in Folder.Files 'Hier wird für jede Datei in Arbeitsordner der Name abgelegt.  
	sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind).  
	oVerlinkteDateien.WriteLine Replace(sNameTemp, "_", " ") 'Ersetzen von "_" mit " "  
Next
oVerlinkteDateien.Close


Const adVarChar = 200'Datenbankfelder  
Const MaxCharacters = 255
Const adFldIsNullable = 32

'###### Datenbank aufbauen und befüllen ######  
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable      'Split(0)  
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable   'Split(1)  
SonderList.Fields.Append "SonderNam", adVarChar, MaxCharacters, adFldIsNullable   'Split(2)  
SonderList.Fields.Append "Text", adVarChar, MaxCharacters, adFldIsNullable        'Feld "LinkNamen" definieren  
SonderList.Fields.Append "VerliDat", adVarChar, MaxCharacters, adFldIsNullable    'Feld Verlinkte Dateien definieren  
SonderList.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable         'Feld "URL" definieren  
SonderList.Open


Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading)
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen  
	If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar  
		SonderList.AddNew
		SonderList("Sonder") = aZeile(0)  
		SonderList("SonderDat") = aZeile(1)  
		SonderList("SonderNam") = aZeile(2)  
		SonderList.Update
	End If
Loop
oSonderzeichen.Close

Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben  

Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen  
lInCounter = 0
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen  
	lInCounter = lIncounter + 1
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile:  
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen)  
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen)  
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen)  

		'Zerlegung des 3. Teiles:  
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text  
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """")  
		Else
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"  
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"  
			If aZeile(1) <> "" Or sText <> "" Then  
				SonderList.AddNew 'neuen Datensatz erstellen  
				SonderList("URL") = aZeile(1) 'Feld "URL" befüllen  
				SonderList("Text") = SonderKonvert(sText)    'Feld "Text" befüllen; dazu vorweg Sonderzeichen konvertieren  
				SonderList.Update '...  und Datensatz eintragen   
			Else
				'Eintrag in das Protokoll:  
					'Alle Teile zusammenfassen,  
					'dabei die entfernten Anführungszeichen wieder einfügen und  
					'Zeile in Protokolldatei schreiben  
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """")  
			End If
		End If
	Else
		'Hier können dann die Sonderfälle rein  
		
	End If
Loop
oLinkListe.Close
oProtokoll.Close

'###### Linknamen in Datei schreiben ######  
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True)

SonderList.MoveFirst 'beim ersten Datensatz beginnen ...  
Do While Not SonderList.EOF
	oLinkNamen.WriteLine SonderList.Fields.Item("Text")  
	SonderList.MoveNext
Loop
oLinkNamen.Close



'##################################### Ende des Hauptprogramms #####################################  


'###### Funktion zum Konvertieren von Sonderzeichen ######  
Function SonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderNam"), SonderList.Fields.Item("Sonder"))  
	SonderList.MoveNext
Loop
SonderKonvert = sTemp
End Function
Mitglied: bastla
bastla 06.09.2007 um 22:10:49 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 06.09.2007 um 22:42:13 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 07.09.2007 um 15:10:10 Uhr
Goto Top
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 face-smile, 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, face-wink, 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
Mitglied: bastla
bastla 07.09.2007 um 20:29:20 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 07.09.2007 um 20:52:14 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 10.09.2007 um 23:22:15 Uhr
Goto Top
Hallo bastla.
Habe das Prokekt bis hierhin konkretisiert.
Kannst Du den Rest mal übersetzten.
Oder stimmt die Logik soweit?
Gruß
Fraenky
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind  
'sPath = auch Arbeitsordner  
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt"  
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt"  
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt"  
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt"  
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Const ForReading = 1, ForWriting = 2, ForAppending = 8

'###### Argumente prüfen - Pfad festlegen ######  
If WScript.Arguments.Count > 0 Then
	sArg = WScript.Arguments(0)
	If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei  
		sPath = fso.GetFile(sArg).Path
		sPath = Left(sPath, InStrRev(sPath, "\") - 1)  
	Else 'oder ev eines Ordners  
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path
	End If
End If
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog  
	Set oFolder = CreateObject("Shell.Application") _  
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17)  
	If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden  
		sPath = Arbeitsordner
	Else
		sPath = oFolder.Self.Path
	End If
End If

Const adVarChar = 200'Datenbankfelder  
Const MaxCharacters = 255
Const adFldIsNullable = 32

'###### Sonderzeichen-Datenbank aufbauen und befüllen ######  
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Fields.Append "SonderLink", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Open

Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading)
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen  
	If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar  
		SonderList.AddNew
		SonderList("Sonder") = aZeile(0)  
		SonderList("SonderDat") = aZeile(1)  
		SonderList("SonderLink") = aZeile(2)  
		SonderList.Update
	End If
Loop
oSonderzeichen.Close

'###### Link-Datenbank aufbauen und befüllen ######  
Set LinkDat = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
LinkDat.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren  
LinkDat.Fields.Append "LinkName", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren  
LinkDat.Open

Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben  
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen  
lInCounter = 0
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen  
	lInCounter = lIncounter + 1
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile:  
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen)  
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen)  
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen)  

		'Zerlegung des 3. Teiles:  
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text  
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """")  
		Else  '>expulso</a></p>  
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"  
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"  
			If aZeile(1) <> "" Or sText <> "" Then  
				LinkDat.AddNew 'neuen Datensatz erstellen  
				LinkDat("URL") = aZeile(1) 'Feld "URL" befüllen  
				LinkDat("LinkName") = SonderLinkSonderKonvert(sText)    'Feld "Text" befüllen; dazu vorweg Sonderzeichen konvertieren  
				LinkDat.Update '...  und Datensatz eintragen   
			Else
				'Eintrag in das Protokoll:  
					'Alle Teile zusammenfassen,  
					'dabei die entfernten Anführungszeichen wieder einfügen und  
					'Zeile in Protokolldatei schreiben  
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """")  
			End If
		End If
	Else
		'anderer Zeilenaufbau - wäre näher zu untersuchen  
		'zumindest Protokolleintrag erstellen  
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """")  
	End If
Loop
oLinkListe.Close
oProtokoll.Close


'###### Datei-Datenbank aufbauen und befüllen und Aktionen durchführen######  
Set DateiDat = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
DateiDat.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren  
DateiDat.Fields.Append "DateiName", adVarChar, MaxCharacters, adFldIsNullable 'Feld "DateiName" definieren  
DateiDat.Open
Set oLinkListe = fso.OpenTextFile(LinkListe, ForWriting)
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen  
For Each File in Folder.Files 'Hier wird für jede Datei in Arbeitsordner der Name abgelegt.  
	Do While Not Folder.Files.AtEndOfStream 'Schleife bis zum Dateiende  
		Abschneien ab Punkt bis Ende
		Vergleiche Dateinamen mit LinkName
		If Dateiname = LinkName lösche LinkName in LinkDat, sonst nichts
		Else Ansonsten erstelle Link
		Nimm aus LinkDat(URL) /welcher egal, liegen alle im selben Ordner
		'../Pfad/%C1gua.php  
		und schneide bis zum letzten / incl. ab
		'../Pfad/  
		Jetzt haben Wir Grundpfad ohne SonderDat und ohne Sonderlink
		Speichere Grundpfad in DateiDat(URL)
		Nimm Dateinamen(Format Sonder), konvertiere mit SonderDat und füge Grundpfad an
		../Pfad/Beispiel
		ergänze mit ".php"  
		../Pfad/Beispiel.php
		Füge an "">"  
		../Pfad/Beispiel.php">  
		Nimm den konvertierten Dateinamen SonderDat und konvertiere mit SonderLink
		../Pfad/Beispiel.php">Beispiel und füge </a></p> an  
		Füge am Anfang <p><a href=" ein.  
		Nimm diesen Datensatz
		<p><a href="../Pfad/Beispiel.php">Beispiel</a></p>  
		und schreibe Datensatz in Linkliste.txt an alphabetischer Position
Loop
oLinkListe.Close

Jetzt muß noch der Rest in LinkDat(LinkName) behandelt werden.
	Nimm LinkName und füge .php an
	Erstelle Datei im Arbeitsordner
	
	Jetzt müßte es stimmen.



'##################################### Ende des Hauptprogramms #####################################  


'###### Funktion zum Konvertieren von SonderLink in Sonder ######  
Function SonderLinkSonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderLink"), SonderList.Fields.Item("Sonder"))  
	SonderList.MoveNext
Loop
SonderLinkSonderKonvert = sTemp
End Function


'###### Funktion zum Konvertieren von SonderDat in Sonder ######  

Function SonderDatSonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderDat"), SonderList.Fields.Item("Sonder"))  
	SonderList.MoveNext
Loop
SonderDatSonderKonvert = sTemp
End Function
Mitglied: bastla
bastla 11.09.2007 um 01:56:06 Uhr
Goto Top
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

Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind  
'sPath = auch Arbeitsordner  
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt"  
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt"  
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt"  
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt"  
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt"  
Endergebnis = "C:\skript2\Liste_verifizieren\Fertig.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Const ForReading = 1, ForWriting = 2, ForAppending = 8

'###### Argumente prüfen - Pfad festlegen ######  
If WScript.Arguments.Count > 0 Then
	sArg = WScript.Arguments(0)
	If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei  
		sPath = fso.GetFile(sArg).Path
		sPath = Left(sPath, InStrRev(sPath, "\") - 1)  
	Else 'oder ev eines Ordners  
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path
	End If
End If
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog  
	Set oFolder = CreateObject("Shell.Application") _  
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17)  
	If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden  
		sPath = Arbeitsordner
	Else
		sPath = oFolder.Self.Path
	End If
End If

Const adVarChar = 200'Datenbankfelder  
Const MaxCharacters = 255
Const adFldIsNullable = 32

'###### Sonderzeichen-Datenbank aufbauen und befüllen ######  
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Fields.Append "SonderLink", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Open

Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading)
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen  
	If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar  
		SonderList.AddNew
		SonderList("Sonder") = aZeile(0)  
		SonderList("SonderDat") = aZeile(1)  
		SonderList("SonderLink") = aZeile(2)  
		SonderList.Update
	End If
Loop
oSonderzeichen.Close

'###### Link-Datenbank aufbauen und befüllen ######  
Set LinkDat = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
LinkDat.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren  
LinkDat.Fields.Append "LinkName", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren  
LinkDat.Open

Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben  
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen  
lInCounter = 0
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen  
	lInCounter = lIncounter + 1
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile:  
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen)  
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen)  
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen)  

		'Zerlegung des 3. Teiles:  
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text  
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """")  
		Else  '>expulso</a></p>  
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"  
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"  
			If aZeile(1) <> "" Or sText <> "" Then  
				LinkDat.AddNew 'neuen Datensatz erstellen  
				LinkDat("URL") = aZeile(1)  'Feld "URL" befüllen  
				LinkDat("LinkName") = sText 'Feld "Text" befüllen  
				LinkDat.Update '...  und Datensatz eintragen  
				
				'Überprüfen, ob die verlinkte Datei vorhanden ist und, falls nicht, diese erstellen  
				aDatei = Split(aZeile(1), "/") 'an den "/" unterteilen ...  
				sDatei = aDatei(UBound(aDatei)) '... und den letzten Teil als Dateinamen verwenden  
				sDatei = SonderDatSonderKonvert(sDatei) 'Sonderzeichen konvertieren  
				sDateiMitPfad = sPath & "\" & sDatei  
				If Not fso.FileExists(sDateiMitPfad) Then 'existiert die Datei noch nicht, ...  
					Set oNeueDatei = fso.OpenTextFile(sDateiMitPfad, ForWriting, True) '... dann erstellen  
				End If
			Else
				'Eintrag in das Protokoll:  
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """")  
			End If
		End If
	Else
		'anderer Zeilenaufbau - wäre näher zu untersuchen  
		'zumindest Protokolleintrag erstellen  
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """")  
	End If
Loop
oLinkListe.Close
oProtokoll.Close

'###### Alle Links in der Datenbank verweisen jetzt auf existierende Dateien ...  ######  

sURL = LinkDat.Fields.Item("URL")  
sURLPfad = Left(sURL, InStrRev(sURL, "/")) 'URLPfad ermitteln  

'###### Alle im Arbeitsordner vorhandenen Dateien ebenfalls in Link-Datenbank eintragen ######  
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen  
For Each File in Folder.Files 'Hier wird jede Datei im Arbeitsordner überprüft und ggf in die Liste aufgenommen  
	sDatei = File.Name
	sDateiName = Left(sDatei, InStrRev(sDatei, ".") - 1) 'Namen isolieren  
	sDateiTyp = Mid(sDatei, InStrRev(sDatei, ".")) 'Typ isolieren  
	If LCase(sDateiTyp) = ".php" Then 'nur PHP-Dateien  
		LinkDat.AddNew 'neuen Datensatz erstellen  
		LinkDat("URL") = sURLPfad &  SonderDatKonvert(sDatei) 'Feld "URL" befüllen  
		LinkDat("LinkName") = SonderLinkKonvert(Replace(sDateiName, "_", " ")) 'Feld "LinkName" befüllen; dazu vorweg Sonderzeichen konvertieren  
		LinkDat.Update '...  und Datensatz eintragen  
	End If
Next

'###### Die Datenbank enthält jetzt alle existierenden Dateien, wobei alle  
'        bereits früher in der Liste vorhandenen doppelt eingetragen sind ######  

LinkDat.Sort = "URL"  
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForWriting, True) 'Zieldatei öffnen; ev bereits vorhandene Datei überschreiben  

sPrevURL = "" 'Startwerte für Satzvergleich setzen  
LinkDat.MoveFirst 'beim ersten Datensatz beginnen ...  
Do Until LinkDat.EOF '... und bis zum letzten durchgehen  
	'Unterschied zum vorhergehenden Datensatz?  
	If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then  
		'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben  
		oEndergebnis.WriteLine "<p><a href=""" & _  
			LinkDat.Fields.Item("URL") & _  
			""">" & _  
			LinkDat.Fields.Item("LinkName") & _  
			"</a></p>"  
		'letzte geschriebene Daten merken  
		sPrevURL = LinkDat.Fields.Item("URL")  
	End If
	'nächsten Datensatz auswählen  
	LinkDat.MoveNext
Loop
'Ausgabedatei schließen  
oEndergebnis.Close

'##################################### Ende des Hauptprogramms #####################################  

'###### Funktion zum Konvertieren von SonderLink in Sonder ######  
Function SonderLinkSonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderLink"), SonderList.Fields.Item("Sonder"))  
	SonderList.MoveNext
Loop
SonderLinkSonderKonvert = sTemp
End Function

'###### Funktion zum Konvertieren von SonderDat in Sonder ######  
Function SonderDatSonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderDat"), SonderList.Fields.Item("Sonder"))  
	SonderList.MoveNext
Loop
SonderDatSonderKonvert = sTemp
End Function

'###### Funktion zum Konvertieren von Sonder in SonderLink ######  
Function SonderLinkKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("Sonder"), SonderList.Fields.Item("SonderLink"))  
	SonderList.MoveNext
Loop
SonderLinkKonvert = sTemp
End Function

'###### Funktion zum Konvertieren von Sonder in SonderDat ######  
Function SonderDatKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("Sonder"), SonderList.Fields.Item("SonderDat"))  
	SonderList.MoveNext
Loop
SonderDatKonvert = sTemp
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":
 ,%20, 
À,%C0,&Agrave;
Á,%C1,&Aacute;
Â,%C2,&Acirc;
Ã,%C3,&Atilde;
Ä,%C4,Auml;
Ç,%C7,&Ccedil;
È,%C8,&Egrave;
É,%C9,&Eacute;
Ê,%CA,&Ecirc;
Ì,%CC,&Igrave;
Í,%CD,&Iacute;
Õ,%D5,&Otilde;
Ö,%D6,&Ouml;
Ú,%DA,&Uacute;
Ü,%DC,&Uuml;
à,%E0,&agrave;
á,%E1,&aacute;
â,%E2,&acirc;
ã,%E3,&atilde;
ä,%E4,&auml;
ç,%E7,&ccedil;
è,%E8,&egrave;
é,%E9,&eacute;
ê,%EA,&ecirc;
ì,%EC,&igrave;
í,%ED,&iacute;
ó,%F3,&oacute;
ô,%F4,&ocirc;
õ,%F5,&otilde;
ö,%F6,&ouml;
ú,%FA,&uacute;
ü,%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
Mitglied: Fraenky
Fraenky 11.09.2007 um 16:05:44 Uhr
Goto Top
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
Mitglied: bastla
bastla 11.09.2007 um 16:08:23 Uhr
Goto Top
Hallo Fraenky!

Versuch es mit einer Sicherheitsabfrage vorweg:
	If InStrRev(sDatei, ".") > 1 Then  
		sDateiName = Left(sDatei, InStrRev(sDatei, ".") - 1) 'Namen isolieren  
	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
Mitglied: Fraenky
Fraenky 11.09.2007 um 16:21:17 Uhr
Goto Top
Hallo bastla.
Nett von Dir.
Werde ich dann mal versuchen.
Gruß
Fraenky
Mitglied: Fraenky
Fraenky 11.09.2007 um 18:53:36 Uhr
Goto Top
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
Mitglied: bastla
bastla 11.09.2007 um 20:31:22 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 12.09.2007 um 20:37:31 Uhr
Goto Top
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?

Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind  
'sPath = auch Arbeitsordner  
VerlinkteDateienNeu = "C:\skript2\Liste_verifizieren\VerlinkteDateienNeu.txt"  
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt"  
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt"  
LinkNamenNeu = "C:\skript2\Liste_verifizieren\LinkNamenNeu.txt"  
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt"  
GesammtLinkNamen = "C:\skript2\Liste_verifizieren\GesammtLinkNamen.txt"  
Endergebnis = "C:\skript2\Liste_verifizieren\Fertig.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Const ForReading = 1, ForWriting = 2, ForAppending = 8

'###### Argumente prüfen - Pfad festlegen ######  
If WScript.Arguments.Count > 0 Then
	sArg = WScript.Arguments(0)
	If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei  
		sPath = fso.GetFile(sArg).Path
		sPath = Left(sPath, InStrRev(sPath, "\") - 1)  
	Else 'oder ev eines Ordners  
		If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path
	End If
End If
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog  
	Set oFolder = CreateObject("Shell.Application") _  
		.BrowseForFolder(0, "Ordner w„hlen", 16, 17)  
	If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden  
		sPath = Arbeitsordner
	Else
		sPath = oFolder.Self.Path
	End If
End If

Const adVarChar = 200'Datenbankfelder  
Const MaxCharacters = 255
Const adFldIsNullable = 32

'###### Sonderzeichen-Datenbank aufbauen und befüllen ######  
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Fields.Append "SonderLink", adVarChar, MaxCharacters, adFldIsNullable  
SonderList.Open

Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading)
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen  
	If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar  
		SonderList.AddNew
		SonderList("Sonder") = aZeile(0)  
		SonderList("SonderDat") = aZeile(1)  
		SonderList("SonderLink") = aZeile(2)  
		SonderList.Update
	End If
Loop
oSonderzeichen.Close

'###### Link-Datenbank aufbauen und befüllen ######  
Set LinkDat = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen  
LinkDat.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable  'Feld "URL" definieren  
LinkDat.Fields.Append "LinkName", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren  
LinkDat.Open

Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben  
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen  
Set oVerlinkteDateienNeu = fso.OpenTextFile(VerlinkteDateienNeu, ForWriting, True)
Set oGesammtLinkNamen = fso.OpenTextFile(GesammtLinkNamen, ForWriting, True)
lInCounter = 0
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende  
	aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen  
	lInCounter = lIncounter + 1
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile:  
		'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen)  
		'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen)  
		'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen)  

		'Zerlegung des 3. Teiles:  
		If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text  
			oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """")  
		Else  '>expulso<p></p>  
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"  
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"  
			If aZeile(1) <> "" Or sText <> "" Then  
				LinkDat.AddNew 'neuen Datensatz erstellen  
				LinkDat("URL") = aZeile(1)  'Feld "URL" befüllen  
				LinkDat("LinkName") = sText 'Feld "Text" befüllen  
				LinkDat.Update '...  und Datensatz eintragen  
				
				'Überprüfen, ob die verlinkte Datei vorhanden ist und, falls nicht, diese erstellen  
				aDatei = Split(aZeile(1), "/") 'an den "/" unterteilen ...  
				sDatei = aDatei(UBound(aDatei)) '... und den letzten Teil als Dateinamen verwenden  
				sDatei = SonderDatSonderKonvert(sDatei) 'Sonderzeichen konvertieren  
				sDateiMitPfad = sPath & "\" & sDatei  
				sProtokollDuplikate = ProtokollDuplikate

Hier wird die GesammtLinkNamen und VelinkteDateienNeu beschrieben.

				If Not fso.FileExists(sDateiMitPfad) Then 'existiert die Datei noch nicht, ...  
					Set oNeueDatei = fso.OpenTextFile(sDateiMitPfad, ForWriting, True) '... dann erstellen  
					oVerlinkteDateienNeu.WriteLine sDatei
					sDatei = Left(sDatei, InStrRev(sDatei, ".") - 1)  
					oGesammtLinkNamen.WriteLine sDatei
					End If

			Else
				'Eintrag in das Protokoll:  
				oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """")  
			End If
		End If
	Else
		'anderer Zeilenaufbau - wäre näher zu untersuchen  
		'zumindest Protokolleintrag erstellen  
		oProtokoll.WriteLine Right("    " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """")  
	End If
Loop
oLinkListe.Close
oProtokoll.Close
oVerlinkteDateienNeu.Close
oGesammtLinkNamen.Close

'###### Alle Links in der Datenbank verweisen jetzt auf existierende Dateien ...  ######  

sURL = LinkDat.Fields.Item("URL")  
sURLPfad = Left(sURL, InStrRev(sURL, "/")) 'URLPfad ermitteln  

'###### Alle im Arbeitsordner vorhandenen Dateien ebenfalls in Link-Datenbank eintragen ######  
Set oGesammtLinkNamen = fso.OpenTextFile(GesammtLinkNamen, ForAppending)
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen  
For Each File in Folder.Files 'Hier wird jede Datei im Arbeitsordner überprüft und ggf in die Liste aufgenommen  
	sDatei = File.Name

Hier wird die GesammtLinkNamen beschrieben:

	If InStrRev(sDatei, ".") > 1 Then  
	sDateiName = Left(sDatei, InStrRev(sDatei, ".") - 1) 'Namen isolieren  
	sDateiTyp = Mid(sDatei, InStrRev(sDatei, ".")) 'Typ isolieren  
	sDateiName = (Replace(sDateiName, "_", " "))  
	oGesammtLinkNamen.WriteLine sDateiName
	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.

	If LCase(sDateiTyp) = ".php" Then 'nur PHP-Dateien  
		LinkDat.AddNew 'neuen Datensatz erstellen  
		LinkDat("URL") = sURLPfad &  SonderDatKonvert(sDatei) 'Feld "URL" befüllen  
		LinkDat("LinkName") = SonderLinkKonvert(Replace(sDateiName, "_", " ")) 'Feld "LinkName" befüllen; dazu vorweg Sonderzeichen konvertieren  
		LinkDat.Update '...  und Datensatz eintragen  
		
	End If
Next

'###### Die Datenbank enthält jetzt alle existierenden Dateien, wobei alle  
'        bereits früher in der Liste vorhandenen doppelt eingetragen sind ######  

LinkDat.Sort = "URL"  
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForWriting, True) 'Zieldatei öffnen; ev bereits vorhandene Datei überschreiben  
Set oLinkNamenNeu = fso.OpenTextFile(LinkNamenNeu, ForWriting, True)
LinkNamenNeu = "C:\skript2\Liste_verifizieren\LinkNamen.txt"  
sPrevURL = "" 'Startwerte für Satzvergleich setzen  
LinkDat.MoveFirst 'beim ersten Datensatz beginnen ...  
Do Until LinkDat.EOF '... und bis zum letzten durchgehen  
	'Unterschied zum vorhergehenden Datensatz?  
	If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then  
		'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben  
		oEndergebnis.WriteLine "<p><a href=""" & _  
			LinkDat.Fields.Item("URL") & _  
			""">" & _  
			LinkDat.Fields.Item("LinkName") & _  
			"</a></p>"  
			'letzte geschriebene Daten merken  
		sPrevURL = LinkDat.Fields.Item("URL")  

Hier versuche ich die LinkNamenNeu zu erfassen. Scheint aber nicht zu stimmen.

	End If
	oLinkNamenNeu.WriteLine LinkDat.Fields.Item("LinkName")  
	'nächsten Datensatz auswählen  
	LinkDat.MoveNext
Loop
'Ausgabedatei schließen  
oEndergebnis.Close
oLinkNamenNeu.Close


'##################################### Ende des Hauptprogramms #####################################  

'###### Funktion zum Konvertieren von SonderLink in Sonder ######  
Function SonderLinkSonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderLink"), SonderList.Fields.Item("Sonder"))  
	SonderList.MoveNext
Loop
SonderLinkSonderKonvert = sTemp
End Function

'###### Funktion zum Konvertieren von SonderDat in Sonder ######  
Function SonderDatSonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("SonderDat"), SonderList.Fields.Item("Sonder"))  
	SonderList.MoveNext
Loop
SonderDatSonderKonvert = sTemp
End Function

'###### Funktion zum Konvertieren von Sonder in SonderLink ######  
Function SonderLinkKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("Sonder"), SonderList.Fields.Item("SonderLink"))  
	SonderList.MoveNext
Loop
SonderLinkKonvert = sTemp
End Function

'###### Funktion zum Konvertieren von Sonder in SonderDat ######  
Function SonderDatKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
	sTemp = Replace(sTemp, SonderList.Fields.Item("Sonder"), SonderList.Fields.Item("SonderDat"))  
	SonderList.MoveNext
Loop
SonderDatKonvert = sTemp
End Function
Mitglied: bastla
bastla 12.09.2007 um 21:35:59 Uhr
Goto Top
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. face-wink

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
Mitglied: Fraenky
Fraenky 12.09.2007 um 21:55:04 Uhr
Goto Top
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.
If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then  
		'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben  
		oEndergebnis.WriteLine "<p><a href=""" & _  
			LinkDat.Fields.Item("URL") & _  
			""">" & _  
			LinkDat.Fields.Item("LinkName") & _  
			"</a></p>"  
			'letzte geschriebene Daten merken  
		sPrevURL = LinkDat.Fields.Item("URL")  
		oLinkNamenNeu.WriteLine LinkDat.Fields.Item("LinkName")  
	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
Mitglied: bastla
bastla 13.09.2007 um 00:15:00 Uhr
Goto Top
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
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
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
Mitglied: Fraenky
Fraenky 13.09.2007 um 15:19:59 Uhr
Goto Top
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
If Not
> fso.FileExists(sDateiMitPfad) Then
> 'existiert die Datei noch nicht, ...  
> 
platzieren.

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

If Not fso.FileExists(sDateiMitPfad) Then 'existiert die Datei noch nicht, ...  
					Set oNeueDatei = fso.OpenTextFile(sDateiMitPfad, ForWriting, True) '... dann erstellen  
					oVerlinkteDateienNeu.WriteLine oNeueDatei
					sDatei = Left(sDatei, InStrRev(sDatei, ".") - 1)  
					oGesammtLinkNamen.WriteLine sDatei
					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
oEndergebnis.WriteLine ...
> 
nur den Linktext in
"GesamtLinkNamen" schreiben.

Also meinst Du hier, das ich statt:

If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then  
		'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben  
		oEndergebnis.WriteLine "<p><a href=""" & _  
			LinkDat.Fields.Item("URL") & _  
			""">" & _  
			LinkDat.Fields.Item("LinkName") & _  
			"</a></p>"  
			'letzte geschriebene Daten merken  
		sPrevURL = LinkDat.Fields.Item("URL")  
		oLinkNamenNeu.WriteLine LinkDat.Fields.Item("LinkName")  
	End If

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. face-wink

Grüße
Fraenky
Mitglied: bastla
bastla 13.09.2007 um 15:34:49 Uhr
Goto Top
Hallo Fraenky!

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

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
oGesammtLinkNamen.WriteLine SonderLinkSonderKonvert(LinkDat.Fields.Item("LinkName"))  
funktionieren.

Grüße
bastla
Mitglied: Fraenky
Fraenky 13.09.2007 um 16:03:03 Uhr
Goto Top
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. face-smile Freude

Alles Klar und
Danke
Fraenky
Mitglied: Fraenky
Fraenky 13.09.2007 um 16:36:24 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 13.09.2007 um 22:05:11 Uhr
Goto Top
Hallo bastla.
Kannst Du mir von hieraus weiterhelfen?

Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True)
If MsgBox("Linkliste aufteilen?", vbYesNo) = vbYes Then LLA = True  
If LLA Then 
	ADO = InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd")  
	Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat")  
			If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then OFN = True  
			IF OFN Then 'Erstelle in Arbeitsordner neue Ordner, Anzahl = AnzDatOrd. fortlaufend nummerierd  
			Else	    ' Öffne ListeNamenOrdner, nimm erste Zeile Inhalt und benenne Ordner entsprechend  
			End If
		
		If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True  
			IF DFN Then 'Erstelle die Dateien mit Endung .php mit fortlaufender Nummerierung  
						'Nimm Linkpfad aus LinkListe aus und schreibe in Datei.  
						'Beispiel:<a href="../Pfad/Aben%E7a.php">Aben&ccedil;a</a> ohne <p></p>  
						'Ersetze ../Pfad mit "PfadInDat"  
						'Also im ersten Ordner liegen "AnzDatOrd". in zweiten usw. bis Ende LinkListe  
						'Schreibe "PfadInDat" + Rest bis Datei in ProtokollNewDat  
						'Beispiel: "PfadInDat"/!/1.php in oder "PfadInDat"/OrdnerName/LinkName.php  
						
			Else		'Nimm LinkNamen und erstelle Datei im Ordner mit Endung .php Rest wie Yes  
			End If
	else WScript.Quit(1)
End If

'##################################### Ende des Hauptprogramms #####################################  
Gruß
Fraenky
Mitglied: Fraenky
Fraenky 16.09.2007 um 16:02:31 Uhr
Goto Top
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.

	If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then  
		'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben  
		oEndergebnis.WriteLine "<p><a href=""" & _  
			LinkDat.Fields.Item("URL") & _  
			""">" & _  
			LinkDat.Fields.Item("LinkName") & _  
			"</a></p>"  
			'letzte geschriebene Daten merken  
		sPrevURL = LinkDat.Fields.Item("URL")  
		oGesammtLinkNamen.WriteLine SonderLinkSonderKonvert(LinkDat.Fields.Item("LinkName"))  
		icountero = icountero + 1
	End If
icountera = icountera + 1
	'nächsten Datensatz auswählen  
	LinkDat.MoveNext
Loop
icountern = (icountera)-(icountero)
'Ausgabedatei schließen  
oEndergebnis.Close
oGesammtLinkNamen.Close
'WScript.Echo "icountern &  neue Links" Warum funktioniert die Ausgabe so nicht?  
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
Mitglied: Fraenky
Fraenky 16.09.2007 um 18:40:11 Uhr
Goto Top
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:
'#########LinkListe aufteilen ########################################  

Set oListeNamenOrdner = fso.OpenTextFile(ListeNamenOrdner, ForReading) 'Datei zum Lesen öffnen  

If MsgBox("Linkliste aufteilen?", vbYesNo) = vbYes Then LLA = True  
If LLA Then 
	Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat")  
	ADO = InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd")  
			If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then OFN = True  
			IF OFN Then 'Erstelle in Arbeitsordner neue Ordner, Anzahl = AnzDatOrd. fortlaufend nummerierd  
				AnzOrd = (icountera) / (AnzDatOrd)
				If icount < AnzOrd Then
					icount = icount + 1
					'Erstelle nummerierte Ordner im Arbeitsordner  
					NeuOrd = fso.CreateFolder("icount");  
				End If
			Else	    ' Öffne ListeNamenOrdner, nimm erste Zeile Inhalt und benenne Ordner entsprechend  
				Do While Not NeuOrd = oListeNamenOrdner.AtEndOfStream
					NeuOrd = fso.CreateFolder("oListeNamenOrdner");  
				
				Loop
			End If
		
		If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True  
			'Prüfe Ordner im Arbeitsordner  
			'Öffne ersten Ordner  

				IF DFN Then 
					If icountz < AnzDatOrd Then
					icountz = icountz + 1
						'Erstelle die Dateien mit Endung .php mit fortlaufender Nummerierung  
						'Beispiel: sPath/1/1-100.php, aPath/2/101-200 usw  
						'Nimm Linkpfad und schreibe in Datei.  
						'Beispiel: In Datei sPath/1/1 Liegt "PfadInDat"/!/1.php in oder "PfadInDat"/OrdnerName/LinkName.php  
						'Also im ersten Ordner liegen "AnzDatOrd". in zweiten usw bis Ende LinkListe  
						
				Else	'Nimm LinkNamen und erstelle Datei im Ordner mit Endung .php  
		End If
	else WScript.Quit(1)
End If

oListeNamenOrdner.close

'##################################### 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.
Mitglied: bastla
bastla 16.09.2007 um 21:35:37 Uhr
Goto Top
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.
'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:
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:
WScript.Echo CStr(icountern) & "  neue Links"  

Grüße
bastla
Mitglied: bastla
bastla 16.09.2007 um 23:33:32 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 17.09.2007 um 14:08:37 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 17.09.2007 um 15:59:24 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 18.09.2007 um 11:07:12 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 18.09.2007 um 20:28:52 Uhr
Goto Top
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
Mitglied: bastla
bastla 18.09.2007 um 22:20:38 Uhr
Goto Top
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:
ProtokollNewDat = "C:\Skripts\ProtokollNewDat.txt"  
If MsgBox("Linkliste aufteilen?", vbYesNo) <> vbYes Then WScript.Quit  

ADO = InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd")  
Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat")  

PfadSonder = SonderDatConvert(Pfad) 'neuen Pfad  konvertieren (wird oft benötigt, daher einmalige Umwandlung hier)  
If Not fso.FolderExists(sPath & "\" & Pfad) Then fso.CreateFolder(sPath & "\" & Pfad) 'Pfad erstellen  

'If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then Then OFN = True  
OFN = True 'vorläufig nur Nummerierung implementiert  

'If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True  
DFN = True 'vorläufig nur Nummerierung implementiert  

Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True) 'Protokolldatei für die neuen Dateien öffnen  
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForReading) 'fertige Liste wieder einlesen  
iONr = 0 'Ordnernummer initialisieren  
iDNr = 0 'Dateinummer initialisieren  
iDinO = ADO 'Zähler "Dateien in Ordner" so setzen, dass sofort ein Ordner erstellt werden muss  

Do While Not oEndergebnis.AtEndOfStream
	iDNr = iDNr + 1 'Dateinummer erhöhen  
	iDinO = iDinO + 1 'Zähler "Dateien in Ordner" erhöhen  
	If iDinO > ADO Then 'Ordner voll  
		iDinO = 1 'Zähler "Dateien in Ordner" zurücksetzen  
		If OFN Then 'nummerierte Ordner verwenden  
			iONr = iONr + 1 'Ordnernummer erhöhen ...  
			sOrdner = CStr(iONr) '... und als Namen des nächsten Ordners festlegen  
		Else
			'Ordnername aus Liste - nicht implementiert  
		End If
		If Not fso.FolderExists(sPath & "\" Pfad & "\" & sOrdner) Then  
			fso.CreateFolder(sPath & "\" Pfad & "\" & sOrdner) 'Nächsten Ordner erstellen  
		End If
	End If
	
	aZeile = Split(oEndergebnis.ReadLine, """") 'Linkzeile einlesen und aufteilen  
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden   
		If InStr(aZeile(2), "<") >= 2 Then 'Link-Text sollte OK sein  
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"  
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"  
			If aZeile(1) <> "" Or sText <> "" Then  
				sURL = PfadSonder & "/" & sOrdner& "/" & Mid(aZeile(1), InStrRev(aZeile(1), "\") + 1)  
				'oder: sURL = PfadSonder & "/" & Mid(aZeile(1), InStrRev(aZeile(1), "\") + 1)  

				sDatName = CStr(iDNr) & ".php"  
				sDatPfad = sPath & "\" & Pfad & "\" & sOrdner & "\" & sDatName  
				fso.OpenTextFile(sDatPfad, ForWriting, True). _
					Write "<a href=""" & sURL & """>" & sText & "</a>" 'Datei erstellen und Link gleich eintragen  
				oProtokollNewDat.WriteLine PfadSonder & "/" & sOrdner & "/" & sDatName  
			End If
		End If
	End If
Loop
oEndergebnis.Close
oProtokollNewDat.Close

Grüße
bastla

[Edit] Fehler bei Überprüfung auf bereits betehenden Zielordner korrigiert. [/Edit]
Mitglied: Fraenky
Fraenky 19.09.2007 um 02:26:16 Uhr
Goto Top
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
[http://www.xyz/IrgendeinOrdner/NochIrgendeinOrdner/Aben%E7a.php aben&ccedil;a]

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">aben&ccedil;a 

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
Mitglied: bastla
bastla 19.09.2007 um 07:19:11 Uhr
Goto Top
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
Mitglied: bastla
bastla 20.09.2007 um 22:21:57 Uhr
Goto Top
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.

ProtokollNewDat = "C:\Skripts\ProtokollNewDat.txt"  
If MsgBox("Linkliste aufteilen?", vbYesNo) <> vbYes Then WScript.Quit  

ADO = InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd")  
Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat")  

'If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then Then OFN = True  
OFN = True 'vorläufig nur Nummerierung implementiert  

'If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True  
DFN = True 'vorläufig nur Nummerierung implementiert  

Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True) 'Protokolldatei für die neuen Dateien öffnen  
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForReading) 'fertige Liste wieder einlesen  
iONr = 0 'Ordnernummer initialisieren  
iDNr = 0 'Dateinummer initialisieren  
iDinO = ADO 'Zähler "Dateien in Ordner" so setzen, dass sofort ein Ordner erstellt werden muss  

Do While Not oEndergebnis.AtEndOfStream
	iDNr = iDNr + 1 'Dateinummer erhöhen  
	iDinO = iDinO + 1 'Zähler "Dateien in Ordner" erhöhen  
	If iDinO > ADO Then 'Ordner voll  
		iDinO = 1 'Zähler "Dateien in Ordner" zurücksetzen  
		If OFN Then 'nummerierte Ordner verwenden  
			iONr = iONr + 1 'Ordnernummer erhöhen ...  
			sOrdner = CStr(iONr) '... und als Namen des nächsten Ordners festlegen  
		Else
			'Ordnername aus Liste - nicht implementiert  
		End If
		If Not fso.FolderExists(sPath & "\" & sOrdner) Then  
			fso.CreateFolder(sPath & "\" & sOrdner) 'Nächsten Ordner erstellen  
		End If
	End If
	
	aZeile = Split(oEndergebnis.ReadLine, """") 'Linkzeile einlesen und aufteilen  
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden   
		If InStr(aZeile(2), "<") >= 2 Then 'Link-Text sollte OK sein  
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"  
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"  
			If aZeile(1) <> "" Or sText <> "" Then  
				sURL = Pfad & "/" & SonderLinkSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "\") + 1))  

				sDatName = CStr(iDNr) & ".php"  
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName  
				fso.OpenTextFile(sDatPfad, ForWriting, True). _
					Write "<a href=""" & sURL & """>" & sText & "</a>" 'Datei erstellen und Link gleich eintragen  
				oProtokollNewDat.WriteLine PfadSonder & "/" & sOrdner & "/" & sDatName  
			End If
		End If
	End If
Loop
oEndergebnis.Close
oProtokollNewDat.Close

Grüße
bastla
Mitglied: Fraenky
Fraenky 22.09.2007 um 22:57:49 Uhr
Goto Top
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
Mitglied: bastla
bastla 23.09.2007 um 12:12:27 Uhr
Goto Top
Hallo Fraenky!

Versuch es mit dieser Version:
ProtokollNewDat = "C:\Skripts\ProtokollNewDat.txt"  

If MsgBox("Linkliste aufteilen?", vbYesNo) <> vbYes Then WScript.Quit  

ADO = CInt(InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd"))  
If ADO <= 0 Then WScript.Quit

Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat")  

'If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then Then OFN = True  
OFN = True 'vorläufig nur Nummerierung implementiert  

'If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True  
DFN = True 'vorläufig nur Nummerierung implementiert  

Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True) 'Protokolldatei für die neuen Dateien öffnen  
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForReading) 'fertige Liste wieder einlesen  
iONr = 0 'Ordnernummer initialisieren  
iDNr = 0 'Dateinummer initialisieren  
iDinO = ADO 'Zähler "Dateien in Ordner" so setzen, dass sofort ein Ordner erstellt werden muss  

Do While Not oEndergebnis.AtEndOfStream
	iDNr = iDNr + 1 'Dateinummer erhöhen  
	iDinO = iDinO + 1 'Zähler "Dateien in Ordner" erhöhen  
	If iDinO > ADO Then 'Ordner voll  
		iDinO = 1 'Zähler "Dateien in Ordner" zurücksetzen  
		If OFN Then 'nummerierte Ordner verwenden  
			iONr = iONr + 1 'Ordnernummer erhöhen ...  
			sOrdner = CStr(iONr) '... und als Namen des nächsten Ordners festlegen  
		Else
			'Ordnername aus Liste - nicht implementiert  
		End If
		If Not fso.FolderExists(sPath & "\" & sOrdner) Then  
			fso.CreateFolder(sPath & "\" & sOrdner) 'Nächsten Ordner erstellen  
		End If
	End If
	
	aZeile = Split(oEndergebnis.ReadLine, """") 'Linkzeile einlesen und aufteilen  
	If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden   
		If InStr(aZeile(2), "<") >= 2 Then 'Link-Text sollte OK sein  
			sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"  
			sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"  
			If aZeile(1) <> "" Or sText <> "" Then  
				sURL = Pfad & "/" & SonderLinkSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1))  
				sDatName = CStr(iDNr) & ".php"  
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName  
				fso.OpenTextFile(sDatPfad, ForWriting, True). _
					Write "<a href=""" & sURL & """>" & sText & "</a>" 'Datei erstellen und Link gleich eintragen  
					'Write  sURL 'Version ohne Tags/Linkschreibweise  
				oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName  
			End If
		End If
	End If
Loop
oEndergebnis.Close
oProtokollNewDat.Close

Grüße
bastla
Mitglied: Fraenky
Fraenky 23.09.2007 um 20:48:30 Uhr
Goto Top
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:

If aZeile(1) <> "" Or sText <> "" Then  
				sURL = Pfad & "/" & SonderLinkSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1))  
				sDatName = CStr(iDNr) & ".php"  
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName  
				sDatName = SonderDatSonder (sDatName)
				fso.OpenTextFile(sDatPfad, ForWriting, True). _
					Write sURL 'Version ohne Tags/Linkschreibweise  
				oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName  
			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
Mitglied: bastla
bastla 23.09.2007 um 21:15:00 Uhr
Goto Top
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
Mitglied: Fraenky
Fraenky 23.09.2007 um 23:37:47 Uhr
Goto Top
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.

If aZeile(1) <> "" Or sText <> "" Then  
				sURL = Pfad & "/" & SonderDatSonder(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1))  
				sDatName = CStr(iDNr) & ".php"  
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName  
				fso.OpenTextFile(sDatPfad, ForWriting, True). _
					Write sURL 'Version ohne Tags/Linkschreibweise  
				oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName  
			End If

Also ich weiß da erstmal nicht weiter.

Gruß
Fraenky
Mitglied: Fraenky
Fraenky 24.09.2007 um 00:42:13 Uhr
Goto Top
Hallo bastla.
Dies paßt schon mal besser.

If aZeile(1) <> "" Or sText <> "" Then  
				sURL = Pfad & "/" & SonderDatSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1))  
				sDatName = CStr(iDNr) & ".php"  
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName  
				fso.OpenTextFile(sDatPfad, ForWriting, True). _
					Write sURL 'Version ohne Tags/Linkschreibweise  
				oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName  
			End If

Aber leider wird der Ordner nicht mitgeliefert.
Folgendes klappt leider nicht:

If aZeile(1) <> "" Or sText <> "" Then  
				sURL = Pfad & "/" & sOrdner & "/" SonderDatSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1))  
				sDatName = CStr(iDNr) & ".php"  
				sDatPfad = sPath & "\" & sOrdner & "\" & sDatName  
				fso.OpenTextFile(sDatPfad, ForWriting, True). _
					Write sURL 'Version ohne Tags/Linkschreibweise  
				oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName  
			End If

Anweisungsende wird erwartet. Hätte sOrdner geklappt, währe die Konvertierung dran gewesen.
Aber so.
Gruß
Fraenky
Mitglied: Biber
Biber 24.09.2007 um 07:00:57 Uhr
Goto Top
Moin Fraenky,

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

sURL = Pfad & "/" & sOrdner & "/"  & SonderDatSonderKonvert( bla........)  

Grüße
Biber
Mitglied: Fraenky
Fraenky 24.09.2007 um 13:28:20 Uhr
Goto Top
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
Mitglied: bastla
bastla 24.09.2007 um 13:39:38 Uhr
Goto Top
Hallo Fraenky!

... läuft das Script und macht, was es sollte.
... dann könntest Du ja den Beitrag Wie kann ich einen Beitrag als gelöst markieren? ...

Grüße
bastla