Step 7 Spalte einer csv datei lesen

Zuviel Werbung?
-> Hier kostenlos registrieren
Ja. Meine csv-Datei hat in diesem Fall als Trennzeichen auch ein Semikolon. Wie man eine Zeile ließt, ist mir klar, nur wie man eine Spalte ließt weiß ich leider nicht. Es gibt doch diesen Befehl "Object.column". Wollte es genau wie mit object.line machen, ging aber leider nicht.
 
Ich könnte ja, jetzt alle Zeilen auslesen und dann die Zellen für die erste Spalte auswerten. Viel schneller ist es doch, wenn ich die gewünschte Spalte auslesen könnte. Geht das nicht? Ich brauche die Daten nur in der ersten Spalte.
 
Wenn du viele Variabeln hast, dann geht es recht einfach wenn die Variabeln in ein ARRAY sind.

Sonnst wäre es vielleicht besser wenn du den Aufgabe löst durch Rezepte anstatt VBS.
 
Do While f.Line < 4
f.SkipLine
Loop
line = f.ReadLine

linearray = Split(line,Trennzeichen)

SmartTags("Test1_0") = linearray(1)



Do While f.Line < 5
f.SkipLine
Loop
line = f.ReadLine

linearray = Split(line,Trennzeichen)

SmartTags("Test1_0") = linearray(1)

Für jede Zeile müsste ich das jetzt machen. Könnte ein großes Skript werden, wo immer das gleiche steht, außer der Zeile. Eine Schleife weiß ich hier nicht zu verwendne.

Mit Rezepten ist jetzt eine andere Sache. Das kann ich machen wenn ich das mit VBS gemacht habe :roll:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie gesagt, wenn deine Variabeln in ein ARRAY plaziert sind, dann geht es einfach mit ein Schleife.

Z.B. wenn "TEST1_0" ein ARRAY von 10 Variabeln ist, dann durchschleifst du den ARRAY so:

Code:
Index = 0
Do While f.AtEndOfStream <> True & Index < 10

    Line = f.ReadLine
    Linearray = Split(Line, ";")
    SmartTags("Test1_0")(index) = Linearray(0) ' ....... oder Linearray(x) abhängig von welchen Kolonne der Wert steht.
    Index = Index + 1
Loop
Dies ist nur ein einfache Beschreibung.
Zusätscliche Checks und Fehlerhantierung muss du selber machen.

Wenn du hast sehr viele Variabeln die nicht in ein oder mehrere ARRAYs arangiert werden kann, dann denke ich das du den Aufgabe besser mit Rezepte lösung kann.


 
Habe jetzt deinen code ausprobiert , mir also 3 EA-Felder ins Startbild platziert, jedoch ließt er immer den selben Wert und zwar ganz am Ende der Spalte. Also da steht immer dasselbe.
 
OK.

Aber pass auf das die eingelesene Werte plausibel sind.
Du kannst die Werte nach grenzen checken, und du kanst mit IsNumeric checken ob den Wert als ein Zahl interpretiert werden kann.
Und auch ON ERROR RESUME verwenden !
 
ON ERROR RESUME nutze ich. Aber wirklich nicht schlecht dein code. Sowas habe ich gesucht. Ich glaube ich muss noch viel lernen :) Danke noch mal.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schreibe Dir eine gesonderte Sub oder Function, die das Zerlegen in "Spalten" (Werte-Array) macht und rufe die für jede gewünschte Zeile auf. Wenn Deine SmartTags ein Array wären, dann könntest Du sehr gut eine Schleife verwenden.

Wenn Du nach der 4. Zeile die 5. Zeile lesen willst, dann brauchst Du kein erneutes While..SkipLine.., ein einfaches ReadLine reicht. Die nächste Zeile nach der 4. Zeile ist die 5. Zeile. :cool:

Vorsicht: Wenn Du Runtime-Errors vermeiden willst, dann prüfe vor dem Split ob Deine line überhaupt Zeichen enthält. Und nach dem Split findest Du die erste "Spalte" in linearray(0). Wenn UBound(linearray) = 0 ist, dann enthält Deine Zeile das angegebene Trennzeichen gar nicht (Formatfehler!), die csv-Datei wurde womöglich auf einem Computer mit falschen Regionaleinstellungen erzeugt. Außerdem solltest Du nach dem Split() auch noch mit Trim() mögliche Leerzeichen entfernen. Schau Dir nochmal genau das oben verlinkte Trim-Beispiel und die VBS-Hilfe an.

Wo kommt Deine csv-Datei her? Wird die maschinell erzeugt oder von Menschen?

Was ist an Deiner Anwendung so ungewöhnlich, daß Du dafür keine vorgefertigten Sachen nutzen kannst?

Harald
 
Harald, Jesper war so freundlich mir eine schöne Lösung zu geben. Da ist der Smarttags ein Array. Klappt auch wunderbar.
Die csv ist von Menschen gemacht.
Wie man eine ließt, war mir bekannt und dann wollte ich eine Spalte lesen, genau nach diesem Prinzip. Es gibt doch ein "column" und da dachte ich, ich kann es damit lösen. Den Link, den du mir zu Beginn gegeben hast, damit konnte ich leider nicht bedient werden, weil ich überhaupt nichts verstanden habe. Auch ist die VBS-Hilfe keine Hilfe. :-(
Ach, wo gibt es denn die vorgefertigten Sachen ? :s6::s6::s6:
 
Nochmal Vorsicht: Die "schöne Lösung" von Jesper ist nur eine Beispiel-Lösung, auf das wesentliche beschränkt. Die klappt nur zufällig "wunderbar" mit Deiner Testdatei. Die Lösung kannst du aber so nicht für eine industrielle Anwendung verwenden. Laß Deine Menschen eine Leerzeile in die CSV-Datei machen und das Skript crasht. Fehler von Menschen können sooo vielfältig sein...

Für VBS haben Texdateien keine "Spalten", bzw. jedes Textzeichen ist eine Spalte. Die "column"-Eigenschaft gibt an, am wievielten Textzeichen in einer Zeile der Lesezeiger (oder Schreibzeiger) gerade steht.
Wenn man VBS programmiert, dann sollte man mit der VBS-Hilfe umgehen und verstehen können.


Es gibt vorgefertigte Sachen, z.B. Rezepturen, worauf auch Jesper Dich bereits hingewiesen hat. Vielleicht kann man Deine Aufgabenstellung so umformen, daß Rezepturen nutzbar sind? Doch wir wissen ja gar nicht was Du da tust oder tun willst.

Entschuldige, doch ich muß Dir leider auch noch auf die Füße treten: Wenn ich mir auch Deine anderen Threads und Fragen anschaue, dann kann ich mir nur sehr schwer vorstellen, daß Du mit Deiner "Do-it-yourself"-"trial-and-error"-Programmierung eine robuste industrietaugliche Lösung für Deine Aufgabe hinbekommst. Ich möchte für Deine Anlage nicht Gewährleistung geben müssen...

Nun sag uns zur Beruhigung, daß Du nur die Lichter in Deinem Heim steuern willst... ;)

Harald
 
Zurück
Oben