Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung VB for Applications

VBScript um Dateien zu vergleichen (fast) fertig

Mitglied: gdnmarc

gdnmarc (Level 1) - Jetzt verbinden

06.07.2008, aktualisiert 17:46 Uhr, 7474 Aufrufe, 3 Kommentare

Hallo Forum,

ich bin leider ein Anfänger und mir fehlt eine Kleinigkeit in meinem Script. Ich möchte zwei Dateien vergleichen und veränderte Zeilen in eine neue Datei ausgeben. Das Script funktioniert aber nur wenn ich die beiden oberen Zeilen zur Variablendeklaration deaktivere, aber warum?

VIELEN DANK!!!

Marc


'Option Explicit
'Dim objFSO, strlastapps, strqueryapps, strFilePath, objF1, objF2, objL1, objL2, WshShell

Const ForWriting = 2
Const OpenAsASCII = 0
Const CreateIfNotExist = True

strlastapps = "lastapps.txt"
strqueryapps = "queryapps.txt"
strFilePath = "newapps.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objF1 = objFSO.OpenTextFile(strlastapps)
Set objF2 = objFSO.OpenTextFile(strqueryapps)
Set objL1 = CreateObject("Scripting.Dictionary")
objL1.CompareMode = vbTextCompare
Set objL2 = CreateObject("Scripting.Dictionary")
objL2.CompareMode = vbTextCompare

' Open the file for write access.
On Error Resume Next
Set objFile = objFSO.OpenTextFile(strFilePath, _
ForWriting, CreateIfNotExist, OpenAsASCII)

' Read first file adding unique value to dictionary object.
Do Until objF1.AtEndOfStream
strV = objF1.ReadLine
If (objL1.Exists(strV) = False) Then
objL1.Add strV, True
End If
Loop
objF1.Close

' Read the second file.
Do Until objF2.AtEndOfStream
strV = objF2.ReadLine
If (objL1.Exists(strV) = False) And (objL2.Exists(strV) = False) Then
objFile.WriteLine strV
End If
' Remove duplicates.
If (objL1.Exists(strV) = True) Then
objL1.Remove strV
End If
' Add unique values to 2nd dictionary object.
If (objL2.Exists(strV) = False) Then
objL2.Add strV, True
End If
Loop
objF2.Close
objFile.Close
Mitglied: bastla
06.07.2008 um 14:53 Uhr
Hallo gdnmarc und willkommen im Forum!

Vielleicht wird's besser, wenn Du auch "objFile" und "strV" deklarierst.

Grüße
bastla

P.S.: Für das Posten von Scripts gibt es hier <code>-Tags ...
Bitte warten ..
Mitglied: gdnmarc
06.07.2008 um 15:32 Uhr
Prima!!! BESTEN DANK das funktioniert jetzt, ich habe jetzt inzwischen noch ein anderes Script erstellt welches auch funktioniert, füge ich es aber zu einem anderen Script hinzu, bleibt die auszugebende Datei immer leer. Führe ich die beiden Scripte separat aus funktioniert alles. Vielleicht habt ihr noch eine Idee? Was genau mache ich falsch, alleine funktionieren odch beide Scripte??? Es wird auch kein Fehler ausgegen, sondern das zu erstellende File newapss.log wird zwar erstellt, bleibt aber einfach leer....

Script1:
01.
Option Explicit 
02.
Dim objFSO, strlastapps, strqueryapps, strnewapps, WshShell 
03.
 
04.
strlastapps = "LastApps.log" 
05.
strqueryapps = "QueryApps.log" 
06.
strnewapps = "NewApps.log" 
07.
 
08.
'LastApps 
09.
 
10.
Const OverwriteExisting = True 
11.
 
12.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
13.
 
14.
If not objFSO.FileExists(strlastapps) Then 
15.
   objFSO.CreateTextFile strlastapps  
16.
End If 
17.
 
18.
If not objFSO.FileExists(strqueryapps) Then 
19.
   objFSO.CreateTextFile strqueryapps  
20.
Else 
21.
   objFSO.CopyFile strqueryapps, strlastapps, OverwriteExisting 
22.
   objFSO.DeleteFile strqueryapps 
23.
   objFSO.CreateTextFile strqueryapps 
24.
End If 
25.
 
26.
'QueryApps 
27.
 
28.
Set WshShell = WScript.CreateObject("WScript.Shell") 
29.
WshShell.Run "sftmime query obj:app /global /short /LOG:QueryApps.log"
Script2:
01.
Option Explicit 
02.
Dim objFSO, objFile1, objFile2, objFile3, strqueryappsDevices, strAddress, strNotqueryapps 
03.
 
04.
Const ForReading = 1 
05.
 
06.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
07.
Set objFile1 = objFSO.OpenTextFile("LastApps.log", ForReading) 
08.
 
09.
strqueryappsDevices = objFile1.ReadAll 
10.
objFile1.Close 
11.
 
12.
Set objFile2 = objFSO.OpenTextFile("QueryApps.log", ForReading) 
13.
 
14.
Do Until objFile2.AtEndOfStream 
15.
    strAddress = objFile2.ReadLine 
16.
    If InStr(strqueryappsDevices, strAddress) = 0 Then 
17.
        strNotqueryapps = strNotqueryapps & strAddress & vbCrLf 
18.
    End If 
19.
Loop 
20.
 
21.
objFile2.Close 
22.
 
23.
'Wscript.Echo "New Apps: " & vbCrLf & strNotqueryapps 
24.
 
25.
Set objFile3 = objFSO.CreateTextFile("NewApps.log") 
26.
 
27.
objFile3.WriteLine strNotqueryapps 
28.
objFile3.Close
Script3 (Script 1+2 zusammen):
01.
Option Explicit 
02.
Dim objFSO, strlastapps, strqueryapps, WshShell 
03.
Dim objFile1, objFile2, objFile3, strqueryappsDevices, strAddress, strNotqueryapps 
04.
 
05.
strlastapps = "LastApps.log" 
06.
strqueryapps = "QueryApps.log" 
07.
 
08.
 
09.
'LastApps 
10.
 
11.
Const OverwriteExisting = True 
12.
 
13.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
14.
 
15.
If not objFSO.FileExists(strlastapps) Then 
16.
   objFSO.CreateTextFile strlastapps  
17.
End If 
18.
 
19.
If not objFSO.FileExists(strqueryapps) Then 
20.
   objFSO.CreateTextFile strqueryapps  
21.
Else 
22.
   objFSO.CopyFile strqueryapps, strlastapps, OverwriteExisting 
23.
   objFSO.DeleteFile strqueryapps 
24.
   objFSO.CreateTextFile strqueryapps 
25.
End If 
26.
 
27.
'QueryApps 
28.
 
29.
Set WshShell = WScript.CreateObject("WScript.Shell") 
30.
WshShell.Run "sftmime query obj:app /global /short /LOG:QueryApps.log" 
31.
 
32.
'NewApps 
33.
 
34.
Const ForReading = 1 
35.
 
36.
'Set objFSO = CreateObject("Scripting.FileSystemObject") 
37.
Set objFile1 = objFSO.OpenTextFile("LastApps.log", ForReading) 
38.
 
39.
strqueryappsDevices = objFile1.ReadAll 
40.
objFile1.Close 
41.
 
42.
Set objFile2 = objFSO.OpenTextFile("QueryApps.log", ForReading) 
43.
 
44.
Do Until objFile2.AtEndOfStream 
45.
    strAddress = objFile2.ReadLine 
46.
    If InStr(strqueryappsDevices, strAddress) = 0 Then 
47.
        strNotqueryapps = strNotqueryapps & strAddress & vbCrLf 
48.
    End If 
49.
Loop 
50.
 
51.
objFile2.Close 
52.
 
53.
'Wscript.Echo "New Apps: " & vbCrLf & strNotqueryapps 
54.
 
55.
Set objFile3 = objFSO.CreateTextFile("NewApps.log") 
56.
 
57.
objFile3.WriteLine strNotqueryapps 
58.
objFile3.Close
Bitte warten ..
Mitglied: bastla
06.07.2008 um 17:46 Uhr
Hallo gdnmark!

Vorweg: Bei einem Test mit 2 geringfügig unterschiedlichen Textdateien "LastApps.log" und "QueryApps.log" und deaktivierten Zeilen 22-24 sowie 30 erhalte ich das korrekte Ergebnis: jene Zeilen, welche in "QueryApps.log", nicht aber in "LastApps.log" aufscheinen - demzufolge müsste der Fehler eigentlich beim Erzeugen der neuen "QueryApps.log" per Shell-Aufruf (den ich hier nicht nachbauen kann) liegen (oder, es gibt eben keine Unterschiede zwischen den beiden Dateien ).
Was mir noch so an Kleinigkeiten aufgefallen ist:

Du erstellst zwar Variable für die Dateinamen, verwendest diese aber dann nicht (eine Folge des Zusammenkopierens). Außerdem würde ich, soferne nichts Wesentliches dagegen spricht, nicht nur Namen, sondern auch Pfade für die Dateien festlegen.

Die Wahl des Variablennamens "strAddress" ergibt für einen, der die Inhalte der .log-Dateien nicht kennt, weniger Sinn, als wenn Du etwa "strLine" verwendet hättest - für Dich wird das aber vermutlich anders sein.

Die entstehende "NewApps.log" schließt mit zwei Leerzeilen (CrLf) - zumindest den zweiten Umbruch kannst Du leicht vermeiden, indem Du mit "Write" anstatt mit "WriteLine" in die Datei schreibst.

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Dateien vergleichen
gelöst Frage von SpacewarpBatch & Shell4 Kommentare

Hallo, vorweg ich bin neu hier. Meine Problem ist das ich zwei TXT Dateien habe. Bsp.: -Datei1.txt- User Programm ...

Batch & Shell
Batch vergleich von zwei dateien
gelöst Frage von realdavegerBatch & Shell6 Kommentare

Hallo, nach Jahrelangem zugucken, habe ich jetzt schlussendlich eine Frage welche ich selbst stelle. Ich versuche 2 zeiten aus ...

Batch & Shell
CSV Dateien vergleichen die Hundertse
gelöst Frage von hansbaerBatch & Shell4 Kommentare

Hiho, ich bin der totale Noob was das angeht, aber ich möchte in einer batch zwei csv Dateien mit ...

Batch & Shell
Powershell - Dateien vergleichen und ergänzen
Frage von Franz-Josef-IIBatch & Shell11 Kommentare

Guten Tag Ich bin wieder einmal bei meiner CSV dran und hänge :-( trotz Google und Co Ausgangslage ist ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 12 StundenLinux1 Kommentar

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit24 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...

Windows 10
Automatische daten kopieren, USB zu USB unter Win10 im Hintergrund
Frage von DerEisigeWindows 1016 Kommentare

Hallo Leute, ich bin auf der Suche nach einem Skript, dass von einem USB Stick automatisch nach dem einstecken ...