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 Batch & Shell

GELÖST

mehrere Leerzeichen mit einem Semikolon ersetzen

Mitglied: keksdieb

keksdieb (Level 1) - Jetzt verbinden

06.05.2009, aktualisiert 12:23 Uhr, 7138 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
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

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 3 TagenTipps & 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 3 TagenSicherheit12 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 3 TagenSicherheit12 Kommentare

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

Heiß diskutierte Inhalte
Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall10 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS9 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen9 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...

Windows Netzwerk
Zugriff auf den Desktop Ordner eines anderen Rechners in der gleichen Domäne
gelöst Frage von JensNomaWindows Netzwerk6 Kommentare

Guten Abend, ich war neulich mit unserem Admin am Tisch gesessen. Er an seinem Notebook angemeldet mit dem Domänen-Admin, ...