1. Zeile einer csv datei überspringen mit VBS
hallo Admin-Freunde
ich bin auf der suche nach dem syntax wie man die 1. zeiler einer .csv datei überspringt.
hab schon alle hilfen die ich habe ich anspruch genommen, doch ohne erfolg.
das einlesen der csv in das vbscript ist kein problem.
nur stehen in der 1. Zeile Vorname, Nachname usw. was eben ignoriert werden muss.
ist es nur ein wert der geändert werden muss damit es klappt?
ein lösungsansatz wäre sehr hilfreich
danke
koluschki
ich bin auf der suche nach dem syntax wie man die 1. zeiler einer .csv datei überspringt.
hab schon alle hilfen die ich habe ich anspruch genommen, doch ohne erfolg.
das einlesen der csv in das vbscript ist kein problem.
nur stehen in der 1. Zeile Vorname, Nachname usw. was eben ignoriert werden muss.
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile ("c:\user.csv",1,0)
Do while not f.AtEndOfLine
Zeile = f.readLine
Feld = split(Zeile,";")
Vorname = Feld(0)
Nachname = Feld(1)
Abteilung = Feld(2)
Gruppe1 = Feld(3)
Gruppe2 = Feld(4)
Gruppe3 = Feld(5)
Gruppe4 = Feld(6)
Gruppe5 = Feld(7)
ist es nur ein wert der geändert werden muss damit es klappt?
ein lösungsansatz wäre sehr hilfreich
danke
koluschki
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 143565
Url: https://administrator.de/forum/1-zeile-einer-csv-datei-ueberspringen-mit-vbs-143565.html
Ausgedruckt am: 23.12.2024 um 15:12 Uhr
32 Kommentare
Neuester Kommentar
Hallo!
So klein ist die Welt ....
Ich schon wieder
versuch doch mal folgende Idee:
definiere eine variable Zeilenzaehler und setze sie auf 0
dann zaehlst Du beim durchlaufen zur variable zeilenzaehler jeweils 1 dazu
und um die 1. Zeile zu überspringen sagst Du einfach:
if zeilenzaehler > 0 then
blablalba
fertig schaut das dann ungefähr so aus:
So klein ist die Welt ....
Ich schon wieder
versuch doch mal folgende Idee:
definiere eine variable Zeilenzaehler und setze sie auf 0
dann zaehlst Du beim durchlaufen zur variable zeilenzaehler jeweils 1 dazu
und um die 1. Zeile zu überspringen sagst Du einfach:
if zeilenzaehler > 0 then
blablalba
fertig schaut das dann ungefähr so aus:
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile ("c:\user.csv",1,0)
zeilenzaehler = 0
Do while not f.AtEndOfLine
Zeile = f.readLine
if zeilenzaehler > 0 then
Feld = split(Zeile,";")
Vorname = Feld(0)
Nachname = Feld(1)
Abteilung = Feld(2)
Gruppe1 = Feld(3)
Gruppe2 = Feld(4)
Gruppe3 = Feld(5)
Gruppe4 = Feld(6)
Gruppe5 = Feld(7)
end if
zeilenzaehler = zeilenzaehler+1
loop
Wie wärs mit Zeile 03:
Gruß
LotPings
If Not f.AtEndOfLine Then Header = f.Readline
Gruß
LotPings
Hallo koluschki!
Nur damit wir hier keine Unklarheiten bekommen oder ich gar schizophren werde:
BASTLA ist bastla und edi.pfisterer ist Edi Pfisterer
(und btw: ist der Mann, der hinter dem alias Bastla steht um einiges firmer im Umgang mit VBS als ich...
insofern wäre es eine Zumutung für ihn, uns hier zu verwechseln )
nun zu Deinem Problem:
Das mit dem Zeilenzaehler war eine Quatschidee...
Sorry!
hier nun eine andere Idee, die hoffentlich mehr Sinn gibt...
Nur damit wir hier keine Unklarheiten bekommen oder ich gar schizophren werde:
BASTLA ist bastla und edi.pfisterer ist Edi Pfisterer
(und btw: ist der Mann, der hinter dem alias Bastla steht um einiges firmer im Umgang mit VBS als ich...
insofern wäre es eine Zumutung für ihn, uns hier zu verwechseln )
nun zu Deinem Problem:
Das mit dem Zeilenzaehler war eine Quatschidee...
Sorry!
hier nun eine andere Idee, die hoffentlich mehr Sinn gibt...
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile ("c:\user.csv",1,0)
Do while not f.AtEndOfLine
if len(zeile) = 0 then
Header = true
else
Header = false
end if
Zeile = f.readLine
if Header = false then
Feld = split(Zeile,";")
Vorname = Feld(0)
Nachname = Feld(1)
Abteilung = Feld(2)
Gruppe1 = Feld(3)
Gruppe2 = Feld(4)
Gruppe3 = Feld(5)
Gruppe4 = Feld(6)
Gruppe5 = Feld(7)
end if
' nun kommt der Eintrag ins AD
loop
Hallo Edi,
ich glaub ich bin im falschen Film
Nach koluschkis Eingangsbeschreibung funktioniert sowohl dein erster Ansatz als auch mein 4 sekunden später geposteter Versuch.
Entweder testet er falsch, oder er hat irreführende/unvollständige Angaben gemacht.
Dein 2.ter Versuch kann so nicht funktionieren weil Zeile erst initialisiert werden sollte.
Gruß
LotPings
PS: @Edi Einrückungen bei IF, Schleifen, Loops machen den Code deutlich besser lesbar
ich glaub ich bin im falschen Film
Nach koluschkis Eingangsbeschreibung funktioniert sowohl dein erster Ansatz als auch mein 4 sekunden später geposteter Versuch.
Entweder testet er falsch, oder er hat irreführende/unvollständige Angaben gemacht.
Dein 2.ter Versuch kann so nicht funktionieren weil Zeile erst initialisiert werden sollte.
Gruß
LotPings
PS: @Edi Einrückungen bei IF, Schleifen, Loops machen den Code deutlich besser lesbar
Hallo LotPings!
Da kann ich Dir heute ausnahmsweise mal nicht recht geben...
mein 2. Ansatz funktionert - ich hab ihn auch getestet...
Das ist ja gerade der Gag an diesem Ansatz, dass die Variable zeile beim ersten Durchlauf der Schleife leer ist, in allen nachfolgenden Durchläufen allerdings nicht.
Was die Einrückungen betrifft gebe ich Dir natürlich recht, aber ich hab den code hier kurzerhand direkt ohne Umschweife eingetippt und da funktionieren TABs leider nicht... sorry!
was anderes:
ich durchblicke Deinen Code nicht...
wie ginge es nach
oder gezielter gefragt:
Wird AtEndOfLine nicht erst erreicht, wenn die letzte Zeile erreicht ist? Falls dem so ist - hm... - ich blick einfach nicht durch....
Montagsproblem?
Danke für Deine Erläuterungen!
Da kann ich Dir heute ausnahmsweise mal nicht recht geben...
mein 2. Ansatz funktionert - ich hab ihn auch getestet...
Das ist ja gerade der Gag an diesem Ansatz, dass die Variable zeile beim ersten Durchlauf der Schleife leer ist, in allen nachfolgenden Durchläufen allerdings nicht.
Was die Einrückungen betrifft gebe ich Dir natürlich recht, aber ich hab den code hier kurzerhand direkt ohne Umschweife eingetippt und da funktionieren TABs leider nicht... sorry!
was anderes:
ich durchblicke Deinen Code nicht...
wie ginge es nach
If Not f.AtEndOfLine Then Header = f.Readline
weiter?oder gezielter gefragt:
Wird AtEndOfLine nicht erst erreicht, wenn die letzte Zeile erreicht ist? Falls dem so ist - hm... - ich blick einfach nicht durch....
Montagsproblem?
Danke für Deine Erläuterungen!
Hallo!
Wieder sinds die Anführungszeichen....
hm...
Vielleicht ginge hier Studieren doch über Probieren )
ergibt für die Variablen
Vorname = hans
nachname = huber
folgenden Wert für die Variable
objUser = objOU.Create("user", "CN=hans huber)
erkennst Du das fehlende Hochkomma am Ende? Vor allem in Kombination mit dem Leerzeichen ein Fehlerquell...
was hälst du von folgender Idee:
Gutes gelingen noch
ich geh jetzt heim
lg
Edi
Wieder sinds die Anführungszeichen....
hm...
Vielleicht ginge hier Studieren doch über Probieren )
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname)
Vorname = hans
nachname = huber
folgenden Wert für die Variable
objUser = objOU.Create("user", "CN=hans huber)
erkennst Du das fehlende Hochkomma am Ende? Vor allem in Kombination mit dem Leerzeichen ein Fehlerquell...
was hälst du von folgender Idee:
Username = Vorname & "_" & Nachname
Set objUser = objOU.Create("user", "CN=" & Username)
Gutes gelingen noch
ich geh jetzt heim
lg
Edi
Zitat von @Edi.Pfisterer:
Hallo LotPings!
Da kann ich Dir heute ausnahmsweise mal nicht recht geben...
mein 2. Ansatz funktionert - ich hab ihn auch getestet...
Das ist ja gerade der Gag an diesem Ansatz, dass die Variable zeile beim ersten Durchlauf der Schleife leer ist, in allen
nachfolgenden Durchläufen allerdings nicht.
Bei mir klappte es nicht, wenn Hallo LotPings!
Da kann ich Dir heute ausnahmsweise mal nicht recht geben...
mein 2. Ansatz funktionert - ich hab ihn auch getestet...
Das ist ja gerade der Gag an diesem Ansatz, dass die Variable zeile beim ersten Durchlauf der Schleife leer ist, in allen
nachfolgenden Durchläufen allerdings nicht.
Zeile = ""
gesetzt wird, ist die Länge auch null, aber die Variable ist initialisiert.was anderes:
ich durchblicke Deinen Code nicht...
wie ginge es nach
> If Not f.AtEndOfLine Then Header = f.Readline
weiter?
oder gezielter gefragt:
Wird AtEndOfLine nicht erst erreicht, wenn die letzte Zeile erreicht ist? Falls dem so ist - hm... - ich blick einfach nicht
f hat einen Lesepointer der mit jeder gelesenen Zeile fortbewegt wird, ist der Pointer mit dem Ende identisch,Wird AtEndOfLine nicht erst erreicht, wenn die letzte Zeile erreicht ist? Falls dem so ist - hm... - ich blick einfach nicht
ergibt die Abrage f.AtEndOfLine TRUE wenn nicht FALSE. Not kehrt das um.
AtEndOfLine kann beliebig oft abgefragt werden, die Do While.Loop macht das ja auch immer wieder
AtEndOfLine sollte hier IMO auch AtEndOfFile heissen.
Gruß
LotPings
Hallo!
füg mal in deinem Code in Zeile 22 folgendes ein
was die Variable Username (gestriger Beitrag 16:00:19 Uhr ) betrifft:
das ist wieder eine andere Baustelle und hat mit der 1. Zeile aus Deiner csv nichts zu tun!
eine Leerstelle beim login ist halt einfach upraktisch bis unbrauchbar... (ist so eine Meinung von mir).
daher also mein Ansatz mit dem Unterstrich... Alternativ geht auch ein "."
hm...
probier - falls Du auf dem leerzeichen bestehst folgendes (ohne Garantie, das es funktioniert)
oder alternativ
btw: ich bin mir nicht sicher, ob ein Leerzeichen im Username überhaupt von Windows akzeptiert wird...
lg
muss in den Unterricht
füg mal in deinem Code in Zeile 22 folgendes ein
zeile = ""
was die Variable Username (gestriger Beitrag 16:00:19 Uhr ) betrifft:
das ist wieder eine andere Baustelle und hat mit der 1. Zeile aus Deiner csv nichts zu tun!
eine Leerstelle beim login ist halt einfach upraktisch bis unbrauchbar... (ist so eine Meinung von mir).
daher also mein Ansatz mit dem Unterstrich... Alternativ geht auch ein "."
hm...
probier - falls Du auf dem leerzeichen bestehst folgendes (ohne Garantie, das es funktioniert)
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname"")
oder alternativ
MeinUsername = Vorname & " " & Nachname
Set objUser = objOU.Create("user", "CN=" & MeinUsername)
btw: ich bin mir nicht sicher, ob ein Leerzeichen im Username überhaupt von Windows akzeptiert wird...
lg
muss in den Unterricht
Hallo koluschki,
wenn du deinen Code vernünftig einrücken würdest,
hättst du wahrscheinlich schon längst erkannt das du innerhalb der do While .. Loop zweimal einen readline machst :
Zeilen 29+33
Das Ergebnis ist also zu erwarten.
Und wenn du meine Kommentare gelesen hättest, wärst du vielleicht selber darauf gekommen.
Wenn du sie doch gelesen hast, solltest du überlegen das Programmieren besser Anderen zu überlassen.
Gruß
LotPings
wenn du deinen Code vernünftig einrücken würdest,
hättst du wahrscheinlich schon längst erkannt das du innerhalb der do While .. Loop zweimal einen readline machst :
Zeilen 29+33
Das Ergebnis ist also zu erwarten.
Und wenn du meine Kommentare gelesen hättest, wärst du vielleicht selber darauf gekommen.
Wenn du sie doch gelesen hast, solltest du überlegen das Programmieren besser Anderen zu überlassen.
Gruß
LotPings
Hallo!
kurze Pause hier bei mir
versuch mal folgendes:
btw: die Einrückungen bei IF wären ein massiver Vorteil in Deinem Code...
Dann hättest Du gesehen, dass Zeile 30 und 31 nur Platzfüller sind, aber in dieser Form keinen Nutzen bringen
(da es ja keine Anweisung gibt, falls die Bedingung erfüllt ist...)
Falls Du es hinbekommst:
Bessere bitte deinen Code aus, damit jemand, der in Zukunft Dein unfreiwilliges Schicksal erlebt, mit googeln etwas Glück hat...
und nicht vergessen als gelöst makieren und vielleicht noch ein Hinweis, dass der Code so nun funktioniert...
btw: In der Praxis würde ich aus der csv die erste Zeile löschen und gut isses
kurze Pause hier bei mir
versuch mal folgendes:
zeile = ""
Do while not f.AtEndOfStream
if len(zeile) = 0 then
Header = true
else
Header = false
end if
Zeile = f.readLine
if Header = false then
' hier kommt nun dein teil...
btw: die Einrückungen bei IF wären ein massiver Vorteil in Deinem Code...
Dann hättest Du gesehen, dass Zeile 30 und 31 nur Platzfüller sind, aber in dieser Form keinen Nutzen bringen
(da es ja keine Anweisung gibt, falls die Bedingung erfüllt ist...)
Falls Du es hinbekommst:
Bessere bitte deinen Code aus, damit jemand, der in Zukunft Dein unfreiwilliges Schicksal erlebt, mit googeln etwas Glück hat...
und nicht vergessen als gelöst makieren und vielleicht noch ein Hinweis, dass der Code so nun funktioniert...
btw: In der Praxis würde ich aus der csv die erste Zeile löschen und gut isses
Zitat von @koluschkiB:
ich hasse programmieren, hab aber keine anderen wahl gehabt als es mri 3monaten an zu tun. du verstehst?
freiwllig befohlen sozusagen
Du hast also eigentlich nur 2 Möglichkeiten, ablehnen oder akzeptieren und reinknien.ich hasse programmieren, hab aber keine anderen wahl gehabt als es mri 3monaten an zu tun. du verstehst?
freiwllig befohlen sozusagen
Eine Dritte "rumjammern und Leute nerven", steht nicht zur Debatte.
ich hab die beiden readline gesehen, wenn ich die erste innerhalb der while do raus machen. wird die erste zeile in der .csv nicht
übersprungen, genau so ist es auch wenn ich die erste wieder reinsetze udn die zweite readline raus mache. also so oder so,
es bringt kein ergebnis. die erste zeile wird einfach mitberücksichtigt.
sind beide drine kommt die fehlermeldung EINGABE HINTER DATEIENDUNG
#§$"%&$§%$"§!übersprungen, genau so ist es auch wenn ich die erste wieder reinsetze udn die zweite readline raus mache. also so oder so,
es bringt kein ergebnis. die erste zeile wird einfach mitberücksichtigt.
sind beide drine kommt die fehlermeldung EINGABE HINTER DATEIENDUNG
IN MEINER ERSTEN ANTWORT STAND ZEILE3, DAS IST AUSSERHALB DER
DO WHILE..LOOP
UND DA GEHÖRT EINE READLINE HIN, UM NUR DIE ERSTE ZEILE ZU ÜBERSPRINGEN!!!!ich hab deine kommentare gelsen, findet es aber selbst nicht übersichtlich wenn man diese da einrückt. im gegenteil. gut
ich bin kein programmiere und es ist sicherlich auch sinnvoll wenn man unzählige functionen usw hat. aber so weit wird es nie
kommen (gott sei dank auch)
Ich habe mich ja bisher für einen einigermassen geduldigen Menschen gehalten;
aber da du scheinbar vor hast, deine Lernresistenz weiter zu pflegen, sag ich nur
Tschüss.
@77559:
Danke für deinen letzten Beitrag, jetzt hab ichs erst gecheckt, was der Zweck von
leichter hätt ich mir getan, wenn du noch ein paar weitere Zeilen angefügt hättest; unglaublich trotzdem, wie blind man sein kann...
@ koluschki
Merkst du was? Da, wo LotPings heute ist (mit seinen Nerven) war ich schon letzte Woche... Dürft also wohl eindeutig an Dir liege - wobei ich meine zu bemerken, dass sich Dein Ton schon sehr gebessert hat! Noch ein paar Wochen und wir haben Dich soweit, dass Du im Code Einrückungen berücksichtigst, im Text Groß- und Kleinschreibung bzw. die deutsche Rechtschreibung berücksichtigst und - das wird wohl das Entscheidende werden - die Antworten wirklich durchliest und nicht nur den Code kopierst und dich ärgerst, wenn er nicht funktionert...
Da Du aber ähnlich ticken dürftest wie ich (cholerisch, ungeduldig aber ausdauernd... ), habe ich aber jede Menge Verständnis für Dein Verhalten...
also, zum Problem zurück:
Was LotPings meinte, ist folgendes (in seiner 1. Antwort):
er liest vor der Do While Schleife die 1. Zeile aus und wirft sie weg....
(zu meiner Schande hab ich das auch erst jetzt durchschaut...)
Der entsprechende Code sieht dann so aus:
gutes gelingen weiterhin
lg
Edi
Danke für deinen letzten Beitrag, jetzt hab ichs erst gecheckt, was der Zweck von
If Not f.AtEndOfLine Then Header = f.Readline
@ koluschki
Merkst du was? Da, wo LotPings heute ist (mit seinen Nerven) war ich schon letzte Woche... Dürft also wohl eindeutig an Dir liege - wobei ich meine zu bemerken, dass sich Dein Ton schon sehr gebessert hat! Noch ein paar Wochen und wir haben Dich soweit, dass Du im Code Einrückungen berücksichtigst, im Text Groß- und Kleinschreibung bzw. die deutsche Rechtschreibung berücksichtigst und - das wird wohl das Entscheidende werden - die Antworten wirklich durchliest und nicht nur den Code kopierst und dich ärgerst, wenn er nicht funktionert...
Da Du aber ähnlich ticken dürftest wie ich (cholerisch, ungeduldig aber ausdauernd... ), habe ich aber jede Menge Verständnis für Dein Verhalten...
also, zum Problem zurück:
Was LotPings meinte, ist folgendes (in seiner 1. Antwort):
er liest vor der Do While Schleife die 1. Zeile aus und wirft sie weg....
(zu meiner Schande hab ich das auch erst jetzt durchschaut...)
Der entsprechende Code sieht dann so aus:
Set f = fso.OpenTextFile("c:\user.csv",1,0)
Abfall = f.Readline ' also die 1. Zeile
Do while not f.AtEndOfStream 'statt AtEndOfLine
Zeile = f.readLine
Feld = split(Zeile,";")
Vorname = Feld(0)
Nachname = Feld(1)
...
gutes gelingen weiterhin
lg
Edi
Ja, freut mich, dass es jetzt funktioniert...
btw:
Gratuliere zu Deinem Ergebnis..
Was mich noch interessieren würde: wie schauts mit den NTFS-Berechtigugen auf den erzeugten Ordnern für die User aus?
Ich will Dir nicht den Mut rauben, aber da gäbe es imho noch Verbesserungspotential
lg
aber könnte bei jedem Fehlschlag in die Kiste unter den Tisch treten
Kenn ich, hab mir schon mal den Zehen gebrochen... (hab vergessen, den Monitorstromstecker einzustecken; der schwarze Bildschirm hat mich dann zu härteren Maßnahmen greifen lassen... ), allerdings war ich da noch um einiges jünger...btw:
Gratuliere zu Deinem Ergebnis..
Was mich noch interessieren würde: wie schauts mit den NTFS-Berechtigugen auf den erzeugten Ordnern für die User aus?
Ich will Dir nicht den Mut rauben, aber da gäbe es imho noch Verbesserungspotential
lg
Ich bin 28 face-wink und selbst in diesem Alter schrecke ich nicht zurück zu härteren Maßnahmen zu greifen.
gemäß dem Motto:"Und hilft nicht Gewalt, hilft viel Gewalt"
Vergiss den Ansatz mit deiner xcacls.vbs
Das geht wesentlich einfacher...
das Programm zum Setzen von Berechtigungen findet sich im Windwosordner und nennt sich cacls
dieses Programm kannst Du
a) direkt in über die MS-DOS - Konsole starten
start/ausführen/cmd --> cacls
(wundere Dich nicht über die karge optische Aufmachung des Programms)
oder
b) von Deinem SuperTool starten lassen
über die entsprechenden Paramter des Programms wirst Du informiert, wenn du
start/ausführen/cmd cacls/? eingibst
zu b)
hier ein Ansatz:
Set WshShell = WScript.CreateObject("WScript.Shell")
' die Berechtigungen werden in den Verzeichnissen der User gesetzt
PermL1 = "Administratoren:F " & Lehrer & ":C " & MUsername & ":R "
PermL2 = MUsername & ":W "
PermA = "Administratoren:F " & Lehrer & ":C " & MUsername & ":R "
CMD = "cmd /c echo j|cacls \\" & ServerName & "\" & LoesungsShare & "\" & ZielOU & "\" & MUsername & " /G " & PermL1 & " && " & _
"echo j|cacls \\" & ServerName & "\" & LoesungsShare & "\" & ZielOU & "\" & MUsername & " /E /G " & PermL2 & " && " & _
"echo j|cacls \\" & ServerName & "\" & AngabeShare & "\" & ZielOU & " /E /G " & PermA
WshShell.Run CMD, 0, 1
Versuche mal mit cacls/? die Syntax von diesem Programm zu durchschaun...
Dann würde ich per Hand am entsprechenden Ordner unter Zuhilfenahme von cacls die Rechte zu verändern versuchen...
(Geduld ist hier gefragt, falls das Dein erster Einsatz von DOS ist...)
Wenn das gelungen ist: versuch diesen Code zu durchblicken...
Der Schwerpunt liegt natürlich in der Variable CMD
Tipp 1) echo j ---> ihat den Zweck, dass du nicht manuell auf J für JA drücken musst...
Tipp 2) (weil ich dich jetzt schon kenne): Achte auf die Hochkomma
gutes gelingen
lg
Edi