Format einlesen

Hallo
ich habe eine Frage zum Import von formatierten Dateien.

Diese sehen zb so aus:
Nr Rechtswert Hochwert Höhe Code Info
100 300.0000 400.0000 125.5600 67 Infoblbla
usw.

Bisher habe ich immer segmentweise die Daten eingelesen von Zeichen bis Zeichen, als Kontrolle für das Format galt immer die Lage des Punktes.

Leider kann es auch vorkommen, das sich durch die Anzahl der Leerzeichen zwischen den Blöcken bzw. durch unterschiedliche Zahlenlängen das Format verschiebt, dadurch liegt auch der Punkt der Koordinaten woanders.

Meine Frage ist, wie ich die Daten beim Import flexibler einlesen kann.
zb das man erkennt, das hier ein Leerzeichen ist, welches die Daten trennt oder man sagt lies von Leerzeichen bis Leerzeichen ein.

Gibts da was schlaues.

mfg werner

Nr Rechtswert Hochwert Höhe Code Info
100 300.0000 400.0000 125.5600 67 Infoblbla
usw.

Bisher habe ich immer segmentweise die Daten eingelesen von
Zeichen bis Zeichen, als Kontrolle für das Format galt immer
die Lage des Punktes.

Leider kann es auch vorkommen, das sich durch die Anzahl der
Leerzeichen zwischen den Blöcken bzw. durch unterschiedliche
Zahlenlängen das Format verschiebt, dadurch liegt auch der
Punkt der Koordinaten woanders.

Hallo Werner,

zeige hier mal mehr Datenzeilen mit unterschiedlichen Leerzeichen usw.
damit man einen Überblick bekommt wie die Daten variieren können.

Benutze den pre-Tag, der wird unterhalb des Eingabebrettes erläutert.

Von was sprichst du? VB, VBS, Vba,??? Version?

Ggfs. dazu noch eine Beispieltext Datei hochladen per FAQ:2861.

Gruß
REinhard

was für ein tag???
Hi
na vom Format ist es wie im Bsp.
Aber stell dir einfach vor das die Leerzeichen zwischen den Zahlen variieren, mal 2 mal 4.
Oder wenn die Punktnummer vorne statt 100 10000 heisst verschiebt si7h auch alles um 2 stellen.

Wie kriegt man das gebacken.
Ich brauch die Zahlen in einzelnen strings.

mfg Werner

Hallo Werner,

hatten wir das nicht schon mal?
Ich habe in Deine Zeile mal ein paar zusätzliche Leerzeichen eingefügt, damit das Programm sie wieder entfernen kann. Wenn Du auf die Antwort antwortest, siehst Du auch die verwendeten Pre-Tags.
So lange, wie Du schon hier bist, solltest Du die aber kennen. :smile:

Gruß Rainer

Private Sub Command1\_Click()
 Dim Zl As String
 Dim Feld() As String
 Dim i As Integer

 Zl = "100 300.0000 400.0000 125.5600 67 Infoblbla"

 While InStr(Zl, " ")
 Zl = Replace(Zl, " ", " ")
 Wend

 Feld = Split(Zl, " ")

 For i = LBound(Feld) To UBound(Feld)
 List1.AddItem Feld(i)
 Next
End Sub

Jetzt Montag *grinskicher* :smile: o,w,T,

hatten wir das nicht schon mal?

Hallo Rainer,

ja.
Übrigens, hab grad meinen Hausarzt Dr. Alzheimer angerufen und er sagt ich solle mir keine Sorgen machen.
Daß ich ruckzuck vergesse wer wann wo was gefragt hat ist unwichtig.
Wichtig ist daß ich an der Problemstellung erkenne, die war doch schonmal da.
Solange daß noch klappt bin ich im grünen Bereich.

Gruß
Reinhard

Grüezi werner

ich habe eine Frage zum Import von formatierten Dateien.

Mich würde hier mehr noch interessieren *wohin* Du diese Daten einlesen willst und *in welcher Form* sie dir vorleigen.

Ist das eine .TXT oder eine .CSV-Datei?

Arbeitest Du mit Excel - wenn ja mit welcher Version?

Diese sehen zb so aus:
Nr Rechtswert Hochwert Höhe Code Info
100 300.0000 400.0000 125.5600 67 Infoblbla
usw.

Bisher habe ich immer segmentweise die Daten eingelesen von
Zeichen bis Zeichen, als Kontrolle für das Format galt immer
die Lage des Punktes.

Leider kann es auch vorkommen, das sich durch die Anzahl der
Leerzeichen zwischen den Blöcken bzw. durch unterschiedliche
Zahlenlängen das Format verschiebt, dadurch liegt auch der
Punkt der Koordinaten woanders.

Wenn Du in Excel arbeitest und das Ganze in einer Textdatei steht scheint mir dein Weg äusserst umständlich zu sein…

Meine Frage ist, wie ich die Daten beim Import flexibler
einlesen kann.
zb das man erkennt, das hier ein Leerzeichen ist, welches die
Daten trennt oder man sagt lies von Leerzeichen bis
Leerzeichen ein.

Gibts da was schlaues.

Beim öffnen einer .TXT-Datei in Excel kannst Du im Assistenten vorgeben dass die Daten am Leerzeichen getrennt werden sollen und auch das Dezimaltrennzeichen kannst Du einstellen.

Wenn Du das mehrfach benötigst, dann zeichne den Vorgang mit dem Makro-Recorder auf und passe anschliessend den Code noch etwas an.

…oder geht es hier um etwas ganz anderes…?

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hi
bin zwar häufig hier, aber ich kopiere nie Code hier rein.
Daher kann ich das auch net.

Stimmt wir hatten das schon mal, ich versuche mich aber immer wieder mit Verbesserungen, und hb jetzt einen Tip bekommen, wie man das evtl. ultimativ lösen kann.

Zum Code, das is schon das gesuchte, Frage aber:

Das geht jetzt für 2 Leerzeichen, dann wird das durch eins ersetzt.
Wenn ich aber 7 Leerzeichen zwischen den Zahlen habe, was passiert dann?
Ich muss ja eine Einheit schaffen, so das ich egal wieviele Leerzeichen dazwischen sind, immer den Text packen kann.

Was macht der Befehl Split? und was ist mit LBOund UBound?
Was macht das?

mfg Werner

Hallo Werner,

Das geht jetzt für 2 Leerzeichen, dann wird das durch eins
ersetzt.
Wenn ich aber 7 Leerzeichen zwischen den Zahlen habe, was
passiert dann?

Nein. Wenn da sieben Leerzeichen sind, findet das Programm ja mindestens zwei aufeinanderfolgende. In der schleife arbeitet das Programm so lang, bis die Anzahl auf 1 reduziert ist.

Du kannst so viele Leerzeichen zwischen die Strings packen, wie Du magst, die werden immer auf genau ein Leerzeichen reduziert.

Was macht der Befehl Split?
und was ist mit LBOund UBound?
Was macht das?

Split zerlegt den String in einem Rutsch in mehrere Strings, in alle Teile, die durch Leerzeichen getrennt sind und legt die in ein Array.

LBound(Array) gibt die Untergrenze des Arrays zurück.
Wenn Du nichts anderes programmiert hast, wird das eine Null sein.

UBound(Array) Gibt die Obergrenze zurück.

Wenn ich diese werte für die Zählschleife verwende, werden mir alle Teile des ursprünglichen Strings angezeigt, egal wie viele das sind.

Wenn Du immer eine feste anzahl hast, kannst Du da auch Zahlen hin schreiben.

Gruß Rainer

Hallo Werner,

bin zwar häufig hier, aber ich kopiere nie Code hier rein.
Daher kann ich das auch net.

du schreibst den Code per hand hier rein? laß das, ist Fehleranfällig und Schreibfehler oder vergessene Codezeilen verwirren potentielle helfer unnötig. Kopier den Code rein und benutze den pre-Tag.
Die Benutzung des pre-Tags ist einfach, tue so als ob du auf einen beliebigen Beitrag antworten willst, dann ist unterhalb des Eingabefeldes die Erklärung zum pre-Tag.
Testen kannst du dann die Funktion durch Betrachtung der Vorschau.

Was macht der Befehl Split? und was ist mit LBOund UBound?
Was macht das?

Stell im Editor den Curser in die Buchstaben der Wörter wie Ubound und drücke F1.
Dann siehts du die Hilfe zu dem Wort. Wenn DANN noch was unklar ist kannst du gerne fragen.

Gruß
Reinhard

Hi
wenn das klappt häättse mir das auch schon früher verraten können.
Ich probiers mal aus.

Mfg Werner

Hi Werner,

wenn das klappt häättse mir das auch schon früher verraten
können.

*gg* vor drei, vier Jahren war ich noch nicht so weit. :smile:
Ich lerne hier jede Woche etwas neu dazu.

Gruß Rainer