Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Frage Entwicklung Batch & Shell

Mitglied: keksdieb

keksdieb (Level 1) - Jetzt verbinden

06.05.2009, aktualisiert 12:23 Uhr, 6826 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Windows Netzwerk
Windows Server 2003 SBS Netzwerk durch neuen Server Ersetzen (9)

Frage von MultiStorm zum Thema Windows Netzwerk ...

Microsoft Office
gelöst Dropdownlisten in Abhängigkeit mit Leerzeichen im Namen (Datenüberprüfung) (2)

Frage von kevische zum Thema Microsoft Office ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...