Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
444to448
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
444to448
444to448
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Text konvertierung mit Hindernissen

Text konvertierung mit Hindernissen
29.06.2004 19:00:56
Volker
Hallo allerseits,
ich stehe vor der Aufgabe, die Ausgabefiles eines Datenloggers im Textformat auszuwerten.
Blöderweise dient in diesen files das Komma sowohl als Dezimaltrennzeichen als auch zum Trennen der Daten.
Also etwa so: 1,0,3234,23,4567,987 usw.
Ich möchte jedes ungerade Komma rauswerfen und dann die Daten in Spalten schreiben.
Eine Prozedur dazu hab ich schon gestrickt und sie funzt auch.
Dauert bei 80 Daten pro Zeile und 900 Zeilen aber zu lange.
Hat irgendwer eine Idee, wie excel das übernehmen kann.
Vielen Dank im Voraus
Volker

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text konvertierung mit Hindernissen
Reinhard
Hi Volker,
Wie sieht denn deine Prozedur aus und wie die ersten 3 zeilen des Textfilese?
Gruß
Reinhard
AW: Text konvertierung mit Hindernissen
30.06.2004 09:36:47
Volker
Hallo Reinhard,
das file fängt so an:
Title: messung150604
Comment:
Date and Time: 06/15/2004 3:12:45 PM
Sample,channel 201,time(abs),channel 202,time(abs),channel 203,time(abs).......
0,46,0866547,0,40,6271629,10,038,40,4305611,20,084,42,8014297,30,124,41,8152771......
1,46,6730995,60,257,41,1663666,70,294,40,5197372,80,334,43,2661781,90,376,42,2356682...
2,47,0522156,120,497,41,5956268,130,536,40,9662933,140,576,44,0804672,150,616,42,7772598.
3,47,8301964,180,737,42,1212845,190,848,41,2016068,200,888,44,9593391,210,939,43,4601822.
4,....
5,
Das kann bis zu channel 240 (also 40 Datensätze pro Zeile) gehen und beliebig viele Zeilen haben.
Links steht die laufende Nr. 1....n, dann folgen jeweils Datensatz und Zeitstempel der Kanäle 1...n im Format dd,dddd,zz,zzz. Die Zeilen bis einschließlich der 0-ten
Messung werden gelöscht.
Mich interessieren nur die Daten, darum werden die Spalten mit den Zeitstempeln nach der Konvertierung ebenfalls gelöscht.
Zuerst wird das file ohne jede Konvertierung in excel geöffnet, dh. die kompletten Datensätze stehen in Spalte "A".
Meine Prozedur arbeitet jetzt jede Zeile ab und löscht jedes ungradzahlige Komma, also alle, die keine Dezimaltrennzeichen sind. Dann wird das ganze über die Standardfunktion
"Text in Tabelle"
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _...........usw.
konvertiert und sieht dann so aus:
1|46,6730995|60,257|41,1663666|70,294|40,5197372|80,334|43,2661781|90,376|42,2356682...
....
Dann lösche ich die 3., 5., 7. usw. Spalte, die die nicht benötigten Daten enthalten.
Die string-operation mache ich so:
Public

Sub komma()
Dim pos, i, j, l As Integer
i = 1
While Cells(i, 1) <> ""
j = 0
l = 2
While l < Len(Cells(i, 1))
If Right(Left(Cells(i, 1), l), 1) = "," And j = 0 Then
Cells(i, 1) = Left(Cells(i, 1), l - 1) & " " & Right(Cells(i, 1), Len_
(Cells(i, 1)) - l)
j = 1
ElseIf Right(Left(Cells(i, 1), l), 1) = "," And j = 1 Then
j = 0
End If
l = l + 1
Wend
i = i + 1
Wend
Jeder String wird zeichenweise durchsucht, in zwei Teile vor und nach den ungeraden
Kommas zerlegt und mit einem Leerzeichen dazwischen wieder zusammengesetzt.
Variable j ist sozusagen Marker für gerade oder ungerade.
Etwas eleganter, aber auch nicht schneller, ist die Variante, alle Kommas in Punkte umzuwandel, die ungeraden Punkte durch Leerzeichen,
die geraden durch Kommas zu ersetzen.
Dabei liefert mir  pos = InStr(Cells(i, 1), ".")   direkt die Position des jeweils 1. Punktes im string.
Public 

Sub komma()
Dim pos, i, k As Integer
Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
i = 1
While Cells(i, 1) <> ""
pos = InStr(Cells(i, 1), ".")
k = 0
While pos <> 0
If k = 0 Then
Cells(i, 1) = Left(Cells(i, 1), pos - 1) & " " & _
Right(Cells(i, 1), Len(Cells(i, 1)) - pos)
k = 1
Else
Cells(i, 1) = Left(Cells(i, 1), pos - 1) & "," & _
Right(Cells(i, 1), Len(Cells(i, 1)) - pos)
k = 0
End If
pos = InStr(Cells(i, 1), ".")
Wend
i = i + 1
Wend
End Sub

So ich hoffe, ich hab Dich nicht mit Infos erschlagen, aber der Sytaxhighlighter funktioniert bei mir nicht, da muß ich immer etwas mehr erklären.
Vielen Dank im Voraus für deine Mühe.
Gruß
Volker
Anzeige
AW: Text konvertierung mit Hindernissen
Reinhard
Hi Volker,
probier mal:

Sub komma2()
Dim neu As Integer, i As Long, letzte  As Long, anz As Integer
Application.ScreenUpdating = False
letzte = Range("A65536").End(xlUp).Row
For i = 1 To letzte
anz = 1
neu = InStr(neu + 1, Cells(i, 1), ",")
merken = Left(Cells(i, 1), neu - 1) & " "
Cells(i, 1) = Mid(Cells(i, 1), neu + 1)
neu = 1
While neu <> 0
neu = InStr(neu + 1, Cells(i, 1), ",")
neu = InStr(neu + 1, Cells(i, 1), ",")
x = neu
anz = anz + 1
neu = InStr(neu + 1, Cells(i, 1), ",")
neu = InStr(neu + 1, Cells(i, 1), ",")
If neu = 0 Then GoTo weiter
Cells(i, 1) = Left(Cells(i, 1), x - 1) & " " & Mid(Cells(i, 1), neu + 1)
neu = x
Wend
weiter:
Cells(i, 1) = merken & Left(Cells(i, 1), x - 1)
Range(Cells(i, 1), Cells(i, anz)) = Split(Cells(i, 1))
Next i
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard
Anzeige
meine Antwort gelesen? o.w.T.
Reinhard
.
AW: Vielen Dank
01.07.2004 09:27:12
Volker
Hallo Reinhard,
sorry, dass ich erst jetzt reagiere.
Mein Problem war zwar dienstlich, aber ich bin eben erst dazu gekommen, Deine Funktion auszuprobieren.
Damit geht's tatsächlich deutlich schneller, auch wenn ich noch nicht blicke, wieso.
Zumal das ganze ja wesentlich komplizierter aussieht als meine Wald- und Wiesenfunktion.
Ich nehm's mal vorerst staunend zu Kenntnis und werd' in einer ruhigen Minute versuchen, die Fkt. nachzuvollziehen.
Also noch mal vielen Dank für die prompte Hilfe.
Viele Grüße
Volker

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige