Wie füge ich einer csv datei was hinzu?
Hallo,
ich möchte einer csv datei noch was hinzufügen, die csv datei hat eine Kopfzeile die ungefähr so aussieht
bla bla 1|bla bla 2|bild 1|bild2|
und unter bild1 und bild2
steht dann zb. 1234.jpg. Ich möchte jetzt die csv so bearbeiten das unter der bild1 spalte nicht 1234.jpg steht, sondern ein zb http:\www.meinepage.de/bilder/1234.jpg
also praktisch einer spalte noch was zufügen zb "http:\www.meinepage.de/bilder/" , mit dem Editor den ich benutze geht ja nur Suchen und Ersetzen, bräuchte einen der Suchen und Hinzufügen (adden) kann, gibs so was? Sonst müsste ich jede Zeile manuell hinzufügen und bei 4000 einträgen zuviel.
Ich hoffe ich konnte das verständlich genug erklären, bin Neuling.
mfg Bert
ich möchte einer csv datei noch was hinzufügen, die csv datei hat eine Kopfzeile die ungefähr so aussieht
bla bla 1|bla bla 2|bild 1|bild2|
und unter bild1 und bild2
steht dann zb. 1234.jpg. Ich möchte jetzt die csv so bearbeiten das unter der bild1 spalte nicht 1234.jpg steht, sondern ein zb http:\www.meinepage.de/bilder/1234.jpg
also praktisch einer spalte noch was zufügen zb "http:\www.meinepage.de/bilder/" , mit dem Editor den ich benutze geht ja nur Suchen und Ersetzen, bräuchte einen der Suchen und Hinzufügen (adden) kann, gibs so was? Sonst müsste ich jede Zeile manuell hinzufügen und bei 4000 einträgen zuviel.
Ich hoffe ich konnte das verständlich genug erklären, bin Neuling.
mfg Bert
Please also mark the comments that contributed to the solution of the article
Content-Key: 195500
Url: https://administrator.de/contentid/195500
Printed on: April 24, 2024 at 00:04 o'clock
13 Comments
Latest comment
Hallo Bert,
meintest du es so in etwa:
Gruss
Tsuki
meintest du es so in etwa:
Const AddText = "http:\www.meinepage.de/bilder/"
Const Spalte = 2
Const TrennZeichen = ","
Const AusgabeDatei = "MeineDatei_Add.csv"
Set FSO = CreateObject("Scripting.FileSystemObject")
TempData = Split(FSO.OpenTextFile("MeineDatei.csv", 1).ReadAll, vbCrLf)
Set objFile = FSO.CreateTextFile(AusgabeDatei, True)
objFile.WriteLine (TempData(0))
For i = 1 To (Ubound(TempData) - 1)
temp1 = split(TempData(i),TrennZeichen)
temp1(Spalte) = AddText & temp1(Spalte)
temp2 = Join(temp1,TrennZeichen)
objFile.WriteLine (temp2)
Next
objFile.Close
Set objFSO = Nothing
Set FSO = Nothing
Wscript.Echo "Erledigt!"
Gruss
Tsuki
Guten Morgen
Schau dir doch die csv-Datei doch einfach mal in einem Editor an. Das Format ist ganz einfach. In der ersten Zeile steht der Tabellenkopf. Spalten werden per Semikolon getrennt. Alle weiteren Zeilen erfassen die Daten.
Insofern du nur wenige Daten hast, die nachgepflegt werden müssen, dann mach das manuell. Bei einer entsprechend großen Tabelle empfehle ich aber dann ein Script.
LG
Schau dir doch die csv-Datei doch einfach mal in einem Editor an. Das Format ist ganz einfach. In der ersten Zeile steht der Tabellenkopf. Spalten werden per Semikolon getrennt. Alle weiteren Zeilen erfassen die Daten.
Insofern du nur wenige Daten hast, die nachgepflegt werden müssen, dann mach das manuell. Bei einer entsprechend großen Tabelle empfehle ich aber dann ein Script.
LG
Hallo Tsuki!
Wird zwar vermutlich keinen großen Performanceunterschied ergeben, aber ich tendiere dazu, derartiges im Speicher (Array) zu erledigen und nur am Ende in die Datei zu schreiben (mit dem Nebeneffekt, dass dann auf Wunsch auch die Originaldatei überschrieben werden kann) - das sähe (ungetestet) etwa so aus:
Grüße
bastla
Wird zwar vermutlich keinen großen Performanceunterschied ergeben, aber ich tendiere dazu, derartiges im Speicher (Array) zu erledigen und nur am Ende in die Datei zu schreiben (mit dem Nebeneffekt, dass dann auf Wunsch auch die Originaldatei überschrieben werden kann) - das sähe (ungetestet) etwa so aus:
Const AddText = "http://www.meinepage.de/bilder/"
Const Spalte = 2
Const TrennZeichen = ","
Const EingabeDatei = "MeineDatei.csv"
Const AusgabeDatei = "MeineDatei_Add.csv"
Set FSO = CreateObject("Scripting.FileSystemObject")
TempData = Split(FSO.OpenTextFile(EingabeDatei).ReadAll, vbCrLf)
For i = 1 To UBound(TempData)
temp1 = Split(TempData(i), TrennZeichen)
temp1(Spalte) = AddText & temp1(Spalte)
TempData(i) = Join(temp1, TrennZeichen)
Next
FSO.CreateTextFile(AusgabeDatei).Write Join(TempData, vbCrLf)
Set FSO = Nothing
WScript.Echo "Erledigt!"
bastla
Hallo bastla,
ich pflichte dir völlig bei!
Mir schwebte erst auch die Array-Geschichte vor, habe mich aber dann erinnert, dass ich mal den Fall hatte/habe(!) , dass ab einer bestimmten Anzahl von Arrays (Zeilen in diesem Fall) der script mit Fehlermeldung abgeschmiert ist. Der TO schrieb was von gut 4000 Zeilen. In meinem Beispiel (WinXP SP3 deu/eng) lag die Zeilenanzahl deutlich unter 4000 und der Fehler tritt auf. Also kam mir die Idee, es direkt Zeile für Zeile zu schreiben (dann kann man aber nicht direkt die Originaldatei überschreiben).
Aber der TO schrieb ja nun, dass er es in Excel direkt machen möchte.
Nun weiss ich aber nicht welche Excel-Version und wie er ein Makro (eventuell) anlegen möchte.
Schönes Adventwochenende und viele Grüsse
Tsuki
ich pflichte dir völlig bei!
Mir schwebte erst auch die Array-Geschichte vor, habe mich aber dann erinnert, dass ich mal den Fall hatte/habe(!) , dass ab einer bestimmten Anzahl von Arrays (Zeilen in diesem Fall) der script mit Fehlermeldung abgeschmiert ist. Der TO schrieb was von gut 4000 Zeilen. In meinem Beispiel (WinXP SP3 deu/eng) lag die Zeilenanzahl deutlich unter 4000 und der Fehler tritt auf. Also kam mir die Idee, es direkt Zeile für Zeile zu schreiben (dann kann man aber nicht direkt die Originaldatei überschreiben).
Aber der TO schrieb ja nun, dass er es in Excel direkt machen möchte.
Nun weiss ich aber nicht welche Excel-Version und wie er ein Makro (eventuell) anlegen möchte.
Schönes Adventwochenende und viele Grüsse
Tsuki
Hallo Tsuki!
in einer Hilfsspalte. Die nach dem "Nach-unten-ausfüllen" entstandenen Werte dann per "Kopieren" und "Inhalte einfügen / Werte" in die Originalspalte transportieren und die Hilfsspalte löschen ...
... und wenn's tatsächlich öfter benötigt wird, sollte es eigentlich egal sein, ob das per VBA oder eben, wie oben gezeigt, VBS umgesetzt wird.
Grüße
bastla
wie er ein Makro (eventuell) anlegen möchte.
Wenn tatsächlich Excel (warum auch immer) verwendet werden soll, genügt für eine einmalige Aktion auch eine (kopierfähige) Formel der Art="http://www.meinepage.de/bilder/"&C2
... und wenn's tatsächlich öfter benötigt wird, sollte es eigentlich egal sein, ob das per VBA oder eben, wie oben gezeigt, VBS umgesetzt wird.
Grüße
bastla
Hallo elvis0408!
Das Script (Tsukis Ansatz oder meiner) ist mit dem Typ ".vbs" zu speichern, per Doppelklick auszuführen und fertig.
Grüße
bastla
brauche da kein script oder so ähnliches zu, ( kanns auch nicht, bin absoluter Neuling in so was)
Gerade, wenn du noch nicht einmal verstanden hast, was ich oben für Excel gezeigt habe, solltest Du ein Script verwenden - Dateinamen (mit Pfad), Trennzeichen (Komma oder Semikolon) und Spaltennummer (- 1 rechnen, da ab 0 gezählt wird) in die ersten Scriptzeilen eintragen sollte ja zu schaffen sein ... Das Script (Tsukis Ansatz oder meiner) ist mit dem Typ ".vbs" zu speichern, per Doppelklick auszuführen und fertig.
Grüße
bastla
Hallo elvis0408!
Für jede Spalte einzeln das Script anpassen und laufen lassen (also immer nur eine Spalte angeben).
Damit, falls nicht in jeder Zeile in der entsprechenden Spalte ein Bildname steht, keine unnötigen Eintragungen erfolgen, die Zeile 15 (bzw im zweiten Script 12) auf
ändern.
Grüße
bastla
Für jede Spalte einzeln das Script anpassen und laufen lassen (also immer nur eine Spalte angeben).
Damit, falls nicht in jeder Zeile in der entsprechenden Spalte ein Bildname steht, keine unnötigen Eintragungen erfolgen, die Zeile 15 (bzw im zweiten Script 12) auf
If Trim(temp1(Spalte)) <> "" Then temp1(Spalte) = AddText & temp1(Spalte)
Grüße
bastla