Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
644to648
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
644to648
644to648
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

knifflige Textdatei

knifflige Textdatei
03.08.2005 10:07:20
Heiko
Hallo, Excel-Profis,
für Euch ist das Problem vermutlich gar nicht so knifflig, aber ich stehe im Moment auf dem Schlauch:
Meine Textdatei besteht aus 2 Teilen. Im Oberen Abschnitt sind Informationen über Parameter einer analytischen Messung enthalten, die ich auslesen möchte. Mit Hilfe einer Do While...Loop Schleife ist mir das bisher auch gelungen. Ab dem Eintrag "&NoValues=1234" beginnt in der folgenden Zeile eine Datenreihe. In der Datei bestehen die Daten aus 2 Spalten, links ein x-Wert und rechts ein y-Wert, getrennt durch Leerzeichen. Excel liest allerdings die Werte in der rechten Spalte so, als würden sie unter dem jeweiligen x-Wert stehe, also zeilenweise.
Wie kann ich es formulieren, dass ab dieser Zeile, wo die Daten beginnen, alle x-Werte in eine Excel-Tabelle in Spalte A und alle y-Werte in Spalte B untereinander geschrieben werden?
Die Datei sieht so aus:
...
&Anode=Cu &Filter= &kV=40 &mA=30
&Detector=ScintCount
...
&Start=3.000 &End=50.000 &Step=0.02000 &Time=2.0 &Counts=0
&Speed=0.1 &Area=14.0 &Accu=1
...
#Values1
&NoValues=2351
3.00000 1721
3.02000 1655
3.04000 1660
3.06000 1596
3.08000 1614
3.10000 1620
3.12000 1651
3.14000 1663
...
...
49.74000 74
49.76000 57
49.78000 71
49.80000 97
49.82000 82
49.84000 78
49.86000 73
49.88000 86
49.90000 77
49.92000 82
49.94000 72
49.96000 69
49.98000 77
50.00000 77
Wie gesagt, mein bisheriger Code liest die Messparameter aus und ermittelt mit Hilfe eines Counters die Zeile, in der die Daten beginnen. Aber die Daten auslesen und sortieren kriege ich nicht formuliert.
Vielleicht kann mir jemand auf die Sprünge helfen.
Danke, Heiko

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: knifflige Textdatei
03.08.2005 12:28:06
Martin
Hallo Heiko,
vielleicht denke ich jetzt zu einfach. Ich würde die Datei mit dem Textassistenten öffenen, als Trennzeichen das Leerzeichen vorgeben und nach dem Einlesen den oberen Teil löschen.
Gruß
Martin Beck
AW: knifflige Textdatei
03.08.2005 14:07:38
Martin
Hallo Heiko,
ich habe meinen Vorschlag jetzt mal mit den von Dir geposteten Daten (gespeichert in der Datei Heiko-Test.txt im Laufwerk H:\) ausprobiert und den Code aufgezeichnet.

Sub Heiko()
ChDir "H:\"
Workbooks.OpenText Filename:="H:\Heiko-Test.txt", Origin:=xlMSDOS, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, Comma:=False _
, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array _
(3, 1), Array(4, 1), Array(5, 1)), TrailingMinusNumbers:=True
End Sub

Die Daten werden einwandfrei auf die Spalten A und B aufgeteilt. Die Überflüssigen Zeilen am Anfang kann man ja manuell löschen.
Gruß
Martin Beck
Anzeige
AW: knifflige Textdatei
03.08.2005 12:28:21
Ralf
Hallo Heiko,
Dein Problem scheint ja nur noch die Spaltenauswahl zu sein. Folgendes Makro brauchst Du dann nur noch einfügen und entsprechend anpassen. Ich denke, es könnte Dir weiterhelfen.

Sub lies()
Dim sText$, x%, spT$, a As Boolean, iZeile%, sZ$
sText = "3.00000 1721" & vbCrLf & "3.02000 1655"
iZeile = 1
'Text von Anfang bis Ende durchlaufen
For x = 1 To Len(sText)
'Hilfsvariable zum ermitteln, ob Zeichen ein Leerzeichen oder Zeilenumbruch ist
sZ = Mid(sText, x, 1)
'Variable zur Aufnahme für den Zellwert füllen
spT = spT & Mid(sText, x, 1)
If sZ = " " Or sZ = Chr(13) Then 'Bei Leerzeichen oder Zeilenumbruch
'Bei Zeilenumbruch den Umbruch abschneiden
If Right(spT, 1) = Chr(13) Then spT = Left(spT, Len(spT) - 1)
'Spaltenwechsel vorbereiten und anschliessendes schreiben
a = Not a
If a Then
Range("A" & iZeile) = spT
Else
Range("B" & iZeile) = spT
iZeile = iZeile + 1
End If
spT = ""
'Prüfe bitte, ob bei Dir auch ein Zeilenumbruch vorhanden ist,
'ansonsten alle Zeilenumbruchsbedingungen auskommentieren
If sZ = Chr(13) Then x = x + 1
End If
'Nur zutreffend für den letzten Eintrag
If x = Len(sText) Then Range("B" & iZeile) = spT
Next x
End Sub

Ciao, Ralf
PS: Wegen der Zeilenumbrüche mußt Du mal schauen ob das so paßt...
Anzeige
AW: knifflige Textdatei, klappt noch nicht
03.08.2005 13:17:47
Heiko
Hallo, Ralf,
vielen Dank für den Ansatz. Leider klappt es noch nicht. Dein Makro setz bei mir in der Zeile mit dem Inhalt "&NoValues" ein. Dieser Inhalt wird in Zelle B1 geschrieben. Die Daten werden nicht ausgelesen.
Mit meinem Makro habe ich es geschafft, den kompletten Datensatz in eine Spalte einzulesen. Das liegt daran, dass Excel die beiden Datenspalten in der Textdatei nicht als Spalten erkennt, sondern glaubt, jeder wert sei eine neue Zeile. Etwa so:
So sieht es aus:
3.00 1234
3.02 1232
3.04 1234
und so wird´s interpretiert:
3.00
1234
3.02
1234
3.04
1234
Es geht nur darum, die Werte, die hier untereinander stehen, wieder in die richteige Spaltenaufteilung zu sortieren. Ich glaube, Leerzeichen und Umbrüche sind nicht das Problem, da sie von Excel sowieso ignoriert werden.
Wie kann man das Auseinanderfummeln der Daten (1. Wert in Zelle a1, 2. in Zelle B1, 3. in Zelle a2, 4. Wert in Zelle b2, usw)als Schleife formulieren?
Danke im voraus, Heiko
Anzeige
Poste doch mal den Code (oT)
03.08.2005 13:34:46
Martin
AW: knifflige Textdatei, klappt noch nicht
03.08.2005 13:46:25
Ralf
Hallo Heiko,
natürlich kann man es auch so machen wie Du es gerade vorgeschlagen hast. Aber besser wäre es doch, das gleich richtig zu machen. Kannst Du die beiden Dateien (Text und Excel) mal rüberbeamen?
Ansonsten ginge es so (noch nicht perfekt aber funktions- und ausbaufähig) :

Sub Puzzeln()
Dim iZeile%, iEnde%
iEnde = Cells.SpecialCells(xlLastCell).Row
For iZeile = 2 To iEnde Step 2
Range("B" & iZeile - 1) = Range("A" & iZeile)
Rows(iZeile & ":" & iZeile).Delete Shift:=xlUp
iZeile = iZeile - 1
Next
End Sub

Achtung: Dabei muß sichergestellt sein, dass in anderen Spalten keine Werte enthalten sind, weil ja alle ungeraden Zeilen komplett gelöscht werden.
Ciao, Ralf
Anzeige
AW: knifflige Textdatei, klappt noch nicht
03.08.2005 15:48:23
Martin
Hallo Heiko,
ich verstehe wirklich das Problem nicht. Wenn ich die Datei https://www.herber.de/bbs/user/25278.xls einfach mit Excel öffne, kommt entweder der Textassistent, dort stellst Du Leerzeichen als Trenner und Punkt als Deziamalzeichen ein und fertig. Oder es steht der ganze Klumpatsch in Spalte A, dann nimmst Du für die Aufteilung auf Spalte A und B eben DATEN - TEXT IN SPALTEN.
Gruß
Martin Beck
Anzeige
AW: knifflige Textdatei, klappt noch nicht
03.08.2005 16:07:14
Heiko
Hi, Martin,
danke für den Tip. Aber um ehrlich zu sein: Ich kenne mich ein wenig mit Excel aus und weiß, dass ich es auch mit Deiner Methode hätte lösen können.
Mit VBA kenne ich mich kaum aus und möchte es gerne besser lernen. Dazu nehme ich gerne die Hilfe der Excel Profis im Forum in Anspruch, wofür ich auch dankbar bin.
Wenn man eine Lösung hat, ist sie meist wesentlich eleganter als die ewige rumklickerei, bis man eine Textdatei geöffnet hat. Stell Dir mal vor, Du hast hunderte davon und kannst mit VBA alles automatisieren. Schont einfach die Zeigefinger-Sehnenscheide!
Abgesehen davon hast Du natürlich recht: Eine Textdatei öffnen ist nicht wirklich ein Problem.
Ciao, Heiko
Anzeige
ich hab´s
03.08.2005 15:49:08
Heiko
Hallo,
ich hab´s geschafft!
Mit einer Variable "switch" schalte ich zwischen den Spalten 1 und 2 hin und her. Dabei wird durch eine if- Abfrage die Stellung des Schalters überprüft. Nach jedem 2. Durchgang wird der "Zeilenvorschub" für die Tabelle einen Wert weiter gezählt:
i = 1
switch = 1
Do While Not EOF(nr)
Input #nr, Text
Value = Val(Text)

If switch = 1 Then
Cells(i, switch).Value = Value
switch = 2
Else:
Cells(i, switch).Value = Value
switch = 1
i = i + 1
End If
Loop
Trotzdem nochmals danke für Eure Tips.
Schade, dass beim User-Level nicht "Excel-gut" und "VBA-wird langsam" gewählt werden kann.
Gruß, Heiko
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige