Top-Themen

Aktuelle Themen (A bis Z)

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

gelöst mehrere Leerzeichen mit einem Semikolon ersetzen

Mitglied: keksdieb

keksdieb (Level 1) - Jetzt verbinden

06.05.2009, aktualisiert 12:23 Uhr, 7221 Aufrufe, 8 Kommentare

Die Daten einer Textdatei soll in eine Excel Tabelle geschrieben werden (mit VBScript).

Moin moin Community

Ich habe folgendes Problem:

Ein Programm erzeugt eine Textdatei in der bestimmte Daten stehen.
Hier ein kleines Beispiel:

Ort    03.04.2009 07:13:00                   757MZO KEY             0            10693,0031  1                                            33,38
das ganze ist aus Übersichtsgründen nur ein teil der Datei...

Das Übertragen der Daten aus der Textdatei in eine Excel Tabelle klappt bereits, allerdings habe ich das Problem, dass ich ein Trennzeichen benötige.
Also habe ich in meinem Script als Trennzeichen das Whitespace genommen, mit dem Ergebnis, dass der Export von vielen Zeilen enorm lange dauert und in der Exceltabelle zig leere Spalten sind.

Ersetze ich mit Replace alle Whitespaces mit einem Zeichen, dann rennt der Export zu Excel richtig schnell, dann habe ich aber ganz viele Kommas oder Semikolons in der Excel tabelle...

Meine Frage:
Hat jemand eine Idee, wie man die Leerzeichen zwischen den Datensätzen in ein Trennzeichen (z.B. ;) umwandeln kann?

Vielen Dank

/*Edit
Eventuell sollte ich das Script noch hochladen...
01.
If objFSO.FileExists(strDateiname) Then 
02.
	'Excel starten und neue Arbeitsmappe erzeugen 
03.
	Set appEx=WScript.CreateObject("Excel.Application") 
04.
	appEx.Visible=True 
05.
	Set objWB=appEx.Workbooks.Add() 
06.
	Set objTab=objWB.Worksheets(1) 
07.
	intZeile=1 
08.
	intSpalte=1 
09.
	'Datei öffnen 
10.
	Set objTDatei=objFSO.OpenTextFile(strDateiname,ForReading) 
11.
	'Datei lesen, Zeile für Zeile 
12.
	Do 	While objTDatei.AtEndofStream=False 
13.
		strZeile=objTDatei.ReadLine() 
14.
		'Aufsplitten in Array 
15.
		arrDaten=Split(strZeile,vbTab) 
16.
		'Für jedes Array-Element Daten in 
17.
		'Tabelle schreiben 
18.
		For intSpalte=1 To UBound(arrDaten)+1 
19.
			objTab.Cells(intZeile,intSpalte).value=arrDaten(intSpalte-1) 
20.
		Next 
21.
		intZeile=intZeile+1 
22.
	Loop   
23.
	objTDatei.Close 
24.
	'Excel beenden und Datei schließen 
25.
	objWB.SaveAs objFSO.BuildPath(strPfad,"export.xls") 
26.
	objWB.Close 
27.
	appEx.Quit  
28.
Else 
29.
	MsgBox "Datei nicht vorhanden" 
30.
End If
Gruß keksdieb
Mitglied: WiSch
06.05.2009 um 13:22 Uhr
Hallo keksdieb,

hier ein Ansatz: http://www.arstechnica.de/index.html?name=http://www.arstechnica.de/com ...

Damit werden schon mal alle Mehrfach-Leerzeichen in eines umgewandelt.
Dann bleibt noch das Problem die Korrektur auf ein Trennzeichen einzusetzen.

Aber ein Start sollte es auf jeden Fall schon einmal sein.
Bitte warten ..
Mitglied: keksdieb
06.05.2009 um 14:05 Uhr
Hi AVEHilfe...

Vielen Dank

Man man, das ist genau das was ich gesucht habe...
Ich bin schwer begeistert und bedanke mich herzlichst bei dir für dein Engagment und Hilfe.

Super...!

ein hellauf begeisterter Keksdieb
Bitte warten ..
Mitglied: WiSch
06.05.2009 um 14:23 Uhr
Gerne.

Ich fänds gut, wenn Du das lauffähige Script hier noch postest... dann haben wir alle was davon.
Bitte warten ..
Mitglied: keksdieb
06.05.2009 um 14:40 Uhr
Ja, du hast recht....

Hier das Script, so wie es bei mir läuft:
01.
'--------- Variablen ------------ 
02.
Const strDATEI="Datei.txt" 
03.
Const ForReading=1, ForWriting=2, ForAppending=8 
04.
Dim objFSO 
05.
Dim strPfad 
06.
Dim strDateiname 
07.
Dim objTDatei 
08.
Dim strAusgabe 
09.
Dim strZeile 
10.
Dim strTemp 
11.
Dim arrDaten 
12.
Dim intPos 
13.
Dim objWB  
14.
Dim appEx 
15.
Dim objTab 
16.
Dim intZeile 
17.
Dim intSpalte 
18.
Dim strExcelDatei 
19.
'-------- Anweisungen ----------- 
20.
Set objFSO=WScript.CreateObject("Scripting.FileSystemObject") 
21.
strPfad=objFSO.GetParentFolderName(WScript.Scriptfullname) 
22.
strDateiname=objFSO.BuildPath(strPfad,strDATEI)  
23.
 
24.
If objFSO.FileExists(strDateiname) Then 
25.
	'Excel starten und neue Arbeitsmappe erzeugen 
26.
	Set appEx=WScript.CreateObject("Excel.Application") 
27.
	appEx.Visible=True 
28.
	Set objWB=appEx.Workbooks.Add() 
29.
	Set objTab=objWB.Worksheets(1) 
30.
	intZeile=1 
31.
	intSpalte=1 
32.
	'Datei öffnen 
33.
	Set objTDatei=objFSO.OpenTextFile(strDateiname,ForReading) 
34.
	'Datei lesen, Zeile für Zeile 
35.
	Do 	While objTDatei.AtEndofStream=False 
36.
		strZeile = objTDatei.ReadLine() 
37.
		strZeile=LeerRed(strZeile) 
38.
		'Aufsplitten in Array 
39.
		arrDaten=Split(strZeile," ") 
40.
		'Für jedes Array-Element Daten in 
41.
		'Tabelle schreiben 
42.
		For intSpalte=1 To UBound(arrDaten)+1 
43.
			objTab.Cells(intZeile,intSpalte).value=arrDaten(intSpalte-1) 
44.
		Next 
45.
		intZeile=intZeile+1 
46.
	Loop   
47.
	objTDatei.Close 
48.
	'Excel beenden und Datei schließen 
49.
	strExcelDatei=InputBox("geben Sie den Dateinamen ein, unter dem der Export gespeichert werden soll:","Export Tankdaten Zeven","*.xls") 
50.
	objWB.SaveAs objFSO.BuildPath(strPfad,strExcelDatei) 
51.
	objWB.Close 
52.
	appEx.Quit  
53.
Else 
54.
	MsgBox "Datei nicht vorhanden" 
55.
End If 
56.
Set appEx=Nothing 
57.
Set objWB=Nothing 
58.
Set objFSO=Nothing 
59.
'--- Prozeduren u. Funktionen --- 
60.
 
61.
'Funktion zum Entfernen der äußert überflüssigen Leerzeichen 
62.
Public Function LeerRed(Zeichen) 
63.
    Dim Pos  
64.
    If IsNull(Zeichen) Then Exit Function 
65.
    Zeichen = Trim(Zeichen) 
66.
    Pos = InStr(1, Zeichen, "  ") ' 2 Leerzeichen !! 
67.
    While Pos <> 0 
68.
        Zeichen = Left(Zeichen, Pos) & Mid(Zeichen, Pos + 2) 
69.
        Pos = InStr(Pos, Zeichen, "  ") 
70.
    Wend 
71.
    LeerRed = Zeichen 
72.
End Function
Ich habe einfach die Funktion mit beigefügt, die VBA Inhalte gelöscht und als Benutzerschmankerl noch eine Inputbox, in der der Anwender den Dateinamen angeben kann, unter der die Exceltabelle gespeichert werden soll...

Das Script läuft nur, wenn die .txt Datei und das Script im gleichen Verzeichnis liegen...!

Also, vielen Dank nochmal für deine Hilfe.
Gruß Keksdieb
Bitte warten ..
Mitglied: 76109
06.05.2009 um 15:25 Uhr
Hallo keksdieb,

So geht's noch etwas schneller:

01.
Dim expDaten(8) 
02.
 
03.
Do Until objTDatei.AtEndofStream 
04.
  
05.
   impDaten = Split(objTDatei.ReadLine) ' Split default Leerzeichen 
06.
 
07.
    e = 1 
08.
    For i = 0 To UBound(impDaten) 
09.
        If impDatenx(i) <> "" Then expDaten(e) = impDaten(i):  e = e + 1 
10.
    Next 
11.
 
12.
    For intSpalte = 1 To UBound(expDaten) 
13.
        objTab.Cells(intZeile, intSpalte).Value = expDaten(intSpalte) 
14.
    Next 
15.
   
16.
    intZeile = intZeile + 1 
17.
 
18.
Loop


Gruß Dieter
Bitte warten ..
Mitglied: 76109
06.05.2009 um 17:30 Uhr
Hallo keksdieb,

Und so nochmal schneller:

01.
Dim expDaten(7) 
02.
 
03.
Do Until objTDatei.AtEndofStream 
04.
  
05.
   impDaten = Split(objTDatei.ReadLine) ' Split default Leerzeichen 
06.
 
07.
   e = 0 
08.
   For i = 0 To UBound(impDaten) 
09.
       If impDaten(i) <> "" Then expDaten(e) = impDaten(i):  e = e + 1 
10.
   Next 
11.
 
12.
   With objTab 
13.
       .Range(.Cells(intZeile, 1), .Cells(intZeile, UBound(expDaten) + 1)) = expDaten 
14.
   With End 
15.
     
16.
   intZeile = intZeile + 1 
17.
 
18.
Loop
Gruß Dieter
Bitte warten ..
Mitglied: keksdieb
11.05.2009 um 12:38 Uhr
ist ja witzig...

Dieter hat dazwischen gepostet und ich habe es übersehen... ^^

@ Dieter, vielen Dank auch für deine Denkanstöße, ich werde mal sehen, was ich optimieren kann und dann gegebenenfalls das optimierte Script posten...

Vielen Dank

Gruß Keks
Bitte warten ..
Mitglied: 76109
11.05.2009 um 13:14 Uhr
Hallo keksdieb,

Zitat von keksdieb:
ist ja witzig...Dieter hat dazwischen gepostet und ich habe es übersehen... ^^

passiert mir ab und zu auch mal.


Gruß Dieter
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
CSV-Datei Komma durch Semikolon ersetzen
gelöst Frage von FalkITBatch & Shell8 Kommentare

Hi Zusammen, ich suche eine Möglichkeit in einer Komma getrennten CSV Datei alle Kommas die als Trenner dienen durch ...

Batch & Shell

Leerzeichen aus mehreren Dateien entfernen und durch ein Munis ersetzen

gelöst Frage von sports-boxBatch & Shell3 Kommentare

Hallo, ich habe einen Ordner mit Dateien, wo jede Datei einen anderen Namen hat. Diese Dateinamen enthalten ein Leerzeichen, ...

Batch & Shell

Leerzeichen als Delimiter funktioniert nicht, ist es ein Leerzeichen?

gelöst Frage von AcJokerBatch & Shell2 Kommentare

Hallo, ich würde gerne mit diese Textdatei auslesen und in Tokens aufteilen Eigentlich sollte ich so in %%i doch ...

Batch & Shell

Mehrere Wörter ersetzen Powershell Skript

gelöst Frage von Beginner01Batch & Shell4 Kommentare

Hallo an die Gemeinde! Ich habe eine Textdatei, in der ich mehrere verteilte Wörter mittels Windows Powershell ersetzen möchte. ...

Neue Wissensbeiträge
Windows 7

Windows 7 - Server 2008 R2: Exploit für Total Meltdown verfügbar

Information von kgborn vor 23 StundenWindows 7

Kleine Information für Administratoren, die für die Updates von Windows 7 SP1 und Windows Server 2008 R2 SP1 verantwortlich ...

Sicherheit

Zero Day-Schwachstelle im Internet Explorer - wird von APT bereits ausgenutzt

Information von kgborn vor 1 TagSicherheit

Im Kernel des Internet Explorer scheint es eine Zero Day-Lücke zu geben, die von staatlichen Akteuren (APT) im Rahmen ...

Microsoft
Folder Security Viewer-Lizenzen zu gewinnen
Information von kgborn vor 1 TagMicrosoft

Ich nehme das Thema mal in Absprache mit Frank hier auf, da es für den einen oder anderen Administrator ...

Hardware

Feueralarm killt Festplatten in Rechenzentrum - führt zu größerem Ausfall

Information von kgborn vor 1 TagHardware12 Kommentare

Noch ein kleiner Beitrag für Administratoren, die in Rechenzentren aktiv sind - so als Fingerzeig. Denn es gibt Szenarien, ...

Heiß diskutierte Inhalte
C und C++
Frage1 C Programmierung-Makefile Frage2 PHP-Programmierung HTTP-Fehler 404
Frage von KatalinaC und C++27 Kommentare

Hallo, ich habe 2 Fragen, die nichts miteinander zu tun haben aber mit denen ich mich gerade beschäftige: 1. ...

Linux
Linux Server oder Windows Server - lohnt eine Umstellung auf Linux und ebenso basierende SW bei einer langfristigen Planung?
Frage von motus5Linux27 Kommentare

Wir brauchen bei uns einen neuen Server. Dieser wird als Fileserver, Domäne Controller sowie Exchange Server verwendet. Wir versuchen ...

LAN, WAN, Wireless
Watchguard T15 VPN Einrichtung
gelöst Frage von thomasjayLAN, WAN, Wireless22 Kommentare

Hallo zusammen, wir möchten gerne über unsere Watchguard T15 einen VPN-Tunnel (Mobile VPN with IPSec) einrichten! Als Client nutzen ...

DSL, VDSL
ISP Wechsel auf Vodefone Koax, Gebäudeverkabelung nur per Cat 7
gelöst Frage von wusa88DSL, VDSL19 Kommentare

Hallo Zusammen, ich bin momentan bei Mnet als Glasfaser Kunde und möchte Preis/Leistungs-Technisch zu Kabel Deutschland / Vodafone wechseln. ...