elvis0408
Goto Top

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

Content-Key: 195500

Url: https://administrator.de/contentid/195500

Printed on: April 24, 2024 at 00:04 o'clock

Member: TsukiSan
TsukiSan Dec 07, 2012 updated at 05:55:58 (UTC)
Goto Top
Hallo Bert,

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
Member: elvis0408
elvis0408 Dec 07, 2012 at 06:06:35 (UTC)
Goto Top
Nein, sorry so meinte ich das nicht, eher wenn ich die Datei im Exel oder einem anderen Editor bearbeite.


mfg
Bert
Member: Fidel83
Fidel83 Dec 07, 2012 updated at 06:40:25 (UTC)
Goto Top
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
Member: bastla
bastla Dec 07, 2012 at 10:24:09 (UTC)
Goto Top
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:
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!"  
Grüße
bastla
Member: TsukiSan
TsukiSan Dec 07, 2012 at 10:48:48 (UTC)
Goto Top
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
Member: bastla
bastla Dec 07, 2012 at 12:17:38 (UTC)
Goto Top
Hallo Tsuki!
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
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
Member: TsukiSan
TsukiSan Dec 07, 2012 at 12:19:19 (UTC)
Goto Top
Hallo bastla,

genau so sehe ich das auch!
Aber aus der originalen Fragestellung geht das so nicht hervor.

Mal sehen, was der TO meint face-wink

Gruss
Tsuki
Member: elvis0408
elvis0408 Dec 07, 2012 at 20:25:36 (UTC)
Goto Top
Ja genau so wie bastla es schreibt meinte ich das, muss nur einmal gemacht werden dann nicht mehr, brauche da kein script oder so ähnliches zu, ( kanns auch nicht, bin absoluter Neuling in so was) Wenn mir das jetzt jemand erklären könnte wie ich das in Exel umsetze wäre ich sehr Dankbar, wie gesagt bin Neuling, eine erklärung für Blöde wäre schon hilfreich für mich.

face-smile

Danke

Bert
Member: bastla
bastla Dec 07, 2012 at 20:34:29 (UTC)
Goto Top
Hallo elvis0408!
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 ... face-wink

Das Script (Tsukis Ansatz oder meiner) ist mit dem Typ ".vbs" zu speichern, per Doppelklick auszuführen und fertig.

Grüße
bastla
Member: elvis0408
elvis0408 Dec 07, 2012 at 20:41:06 (UTC)
Goto Top
Ok danke euch. Werde es dann mal mit euerem Script versuchen.


Melde mich dann obs geklappt hat!


Bert
Member: elvis0408
elvis0408 Dec 07, 2012 at 21:33:56 (UTC)
Goto Top
Hat super geklappt danke, aber noch ne frage, hab gesehen das machmal 2 oder 3 Bilder dabei sein jeweils in spalte 15, 16, 17 wie ergänze ich das scipt dann?

Etwa so

Const AddText = "http://www.meinepage.de/bilder/"
Const Spalte = 15, 16, 17
Const TrennZeichen = ","
Const EingabeDatei = "MeineDatei.csv"
Const AusgabeDatei = "MeineDatei_Add.csv"
Member: bastla
bastla Dec 07, 2012 at 22:30:07 (UTC)
Goto Top
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
If Trim(temp1(Spalte)) <> "" Then temp1(Spalte) = AddText & temp1(Spalte)
ändern.

Grüße
bastla
Member: elvis0408
elvis0408 Dec 08, 2012 at 01:44:10 (UTC)
Goto Top
Hat auch geklappt, ihr seit klasse, jungs. Ich wünsche euch allen ein frohes Weihnachtsfest und einen guten Rutsch


Bert