hansbaer
Goto Top

Zeile aus CSV Datei in eine TXT(ini) datei kopieren.

Hallo,
eine CSV-Datei soll am besten zyklisch untersucht werden. Der Inhalt aus einer bestimmten Zeile soll dann in eine bestimmte Position einer TXT-Datei geschrieben werden. Dies soll aber auch nur geschehen wenn der Inhalt aus dieser Zeile nicht mit dem Inhalt aus der Zieldatei übereinstimmt.

Kann mir jemand helfen?

Grüße,

Thomas

Content-ID: 207903

Url: https://administrator.de/forum/zeile-aus-csv-datei-in-eine-txtini-datei-kopieren-207903.html

Ausgedruckt am: 02.02.2025 um 10:02 Uhr

bastla
bastla 12.06.2013 um 16:49:16 Uhr
Goto Top
Hallo hansbaer und willkommen im Forum!

Wenn du einen bestimmten Batch oder ein bestimmtes VB-Script dafür verwendest, wird das bestimmt funktionieren ... face-wink

BTW:
Dies soll aber auch nur geschehen wenn der Inhalt aus dieser Zeile nicht mit dem Inhalt aus der Zieldatei übereinstimmt.
Was würde denn passieren, wenn bei übereinstimmendem Inhalt trotzdem geschrieben würde?

Grüße
bastla
hansbaer
hansbaer 12.06.2013 um 16:59:46 Uhr
Goto Top
Hallo bastla,

was passieren würde? ich denke nicht viel...
da das ganze aber auch einer schwachbrüstigen Maschine läuft muss nicht unbedingt Kapazität verwendet werden.
Falls das aber keine Rolle spielt kann es dann natürlich trotzdem geschrieben werden.

Grüße,

hansbaer
bastla
bastla 12.06.2013 um 17:08:20 Uhr
Goto Top
Hallo hasbaer!
was passieren würde? ich denke nicht viel...
Hatte ich vermutet; das unnötige Schreiben lässt sich aber bestimmt auch verhindern ...

Grüße
bastla
Endoro
Endoro 12.06.2013 um 17:08:30 Uhr
Goto Top
Hallo hansbaer,

- bestimmte Zeile in csv finden
- Zielstelle suchen und finden
- überprüfen, was da schon steht

Und das alles ohne konkrete Info. Echt klasse Fragestellung. face-sad
@hansbaer ich empfehle EXCEL.

Grüsse!
hansbaer
hansbaer 12.06.2013 um 18:25:27 Uhr
Goto Top
Hallo,

entschuldigt bitte wenn ich nicht genügend Informationen geliefert habe..
hier der Inhalt meiner CSV Datei.


MandantNr;MandantID
2;DSW

Und zwar soll der Inhalt aus Spalte 2 Zeile 2 also hier DSW

in eine Txt Datei mit dem Inhalt:

1234567
alterText
987654


an die Stelle "alterText" kopiert und die TXT Datei dann gespeichert werden.

Excel kommt nicht in Frage, da das ganze auf mehreren Systemen läuft und ich ja nicht für jeden Rechner eine Excel-Version kaufen möchte..
bastla
bastla 12.06.2013 um 19:52:09 Uhr
Goto Top
Hallo hansbaer!

Na dann als VB-Script (Dateityp ".vbs"):
Ein = "D:\Deine.csv"  
Aus = "D:\Deine.txt"  
Zeile = 2
Spalte = 2
Delim = ";"  
Suche = "alterText"  

Set fso = CreateObject("Scripting.FileSystemObject")  
DatEin = Split(fso.OpenTextFile(Ein).ReadAll, vbNewline)
Wert = Split(DatEin(Zeile - 1), Delim)(Spalte - 1)

DatAus = fso.OpenTextFile(Aus).ReadAll
fso.CreateTextFile(Aus).Write Replace(DatAus, Suche, Wert)
Der Suchbegriff muss unter Berücksichtigung von Groß-/Kleinschreibung angegeben werden und wird vollständig durch den gefundenen Wert ersetzt. Die Textdatei wird dabei (ohne Sicherungskopie) durch die neue Version überschrieben.

Grüße
bastla
Endoro
Endoro 12.06.2013 aktualisiert um 20:12:13 Uhr
Goto Top
... und als Batch dann so:
@echo off &setlocal
set "fcsv=file1"  
set "ftxt=file2"  
set "fnew=file3"  

for /f "skip=1tokens=2delims=;" %%i in (%fcsv%) do if not defined txtneu set "txtneu=%%i"  
(for /f "delims=" %%i in (%ftxt%) do (  
	if "%%i"=="alterText" (echo(%txtneu%) else echo(%%i  
))>%fnew%
type %fnew%

Gruss!
hansbaer
hansbaer 12.06.2013 um 20:50:06 Uhr
Goto Top
wahnsinn!
Ihr seit ja echt Granaten! Danke!
Ich möchte mit dieser Aktion Pfade in einer Textdatei automatisch umbenennen.

was mir aber noch nicht ganz an dieser Lösung passt ist, dass die Variable "AlterText" verschiedene Werte haben kann.

als Beispiel

D:\InfoMedia\Layout\TFTupdateDSW
oder
D:\InfoMedia\Layout\TFTUpdateXXXcc
oder
D:\InfoMedia\Layout\TFTUpdateZZZvvv

Der Inhalt aus der o.g. Zelle (zeichenanzahl variabel) der CSV soll immer an die Stelle nach dem D:\InfoMedia\Layout\TFTUpdatexxx geschrieben werden (Zeichenanzahl xxx ebenso variabel)

Wenn bei euren o.g. Lösungen bei ersten mal DSW aus der CSV in "alterText" geschrieben wird, findet die batch bei der nächsten Änderung der CSV ja "alterText" nicht mehr.
bastla
bastla 12.06.2013 aktualisiert um 21:42:15 Uhr
Goto Top
Hallo hansbaer!

Dann geht es wohl eher doch um einen nur teilweise bestimmten Text ...

Unter der Annahme, dass also die relevante Zeile nur mit dem Suchtext beginnen muss, sollte das so gehen:
Ein = "D:\Deine.csv"  
Aus = "D:\Deine.txt"  
Zeile = 2
Spalte = 2
Delim = ";"  
Suche = "D:\InfoMedia\Layout\TFTupdate"  

Set fso = CreateObject("Scripting.FileSystemObject")  
DatEin = Split(fso.OpenTextFile(Ein).ReadAll, vbNewline)
Wert = Split(DatEin(Zeile - 1), Delim)(Spalte - 1)

DatAus = Split(fso.OpenTextFile(Aus).ReadAll, vbNewline)

SLen = Len(Suche)
For i = 0 To UBound(DatAus)
    If Left(DatAus(i), SLen) = Suche Then DatAus(i) = Suche & Wert
Next
fso.CreateTextFile(Aus).Write Join(DatAus, vbNewline)
Grüße
bastla
Endoro
Endoro 12.06.2013 um 23:07:43 Uhr
Goto Top
@echo off &setlocal
set "fcsv=file1"  
set "ftxt=file2"  
set "fnew=file3"  
set "core=D:\InfoMedia\Layout\TFTupdate"  

for /f "skip=1tokens=2delims=;" %%i in (%fcsv%) do if not defined txtneu set "txtneu=%%i"  
(for /f "delims=" %%i in (%ftxt%) do (  
	echo("%%i"|findstr /c:"%core%" >nul && (echo(%core%%txtneu%) || echo(%%i  
))>%fnew%
type %fnew%

Gruss!
hansbaer
hansbaer 13.06.2013 um 16:52:39 Uhr
Goto Top
Das wird ja immer besser!
Nur habe ich in meinem letzten beitrag leichtsinnigerweise die Dateiendung weggelassen- und ich möchte ja mit diesem script einen Dateinamen umbenennen.


als Beispiel

D:\InfoMedia\Layout\TFTupdateDSW.exe
oder
D:\InfoMedia\Layout\TFTUpdateXXXcc.exe
oder
D:\InfoMedia\Layout\TFTUpdateZZZvvv.exe

Der Inhalt aus der o.g. Zelle (zeichenanzahl variabel) der CSV soll immer an die Stelle nach dem D:\InfoMedia\Layout\TFTUpdatexxx geschrieben werden (Zeichenanzahl xxx ebenso variabel)

Wenn bei euren o.g. Lösungen bei ersten mal DSW aus der CSV in "alterText" geschrieben wird, findet die batch bei der nächsten Änderung der CSV ja "alterText" nicht mehr.

Danke für die Hilfe! Ihr seid echt toll!
Endoro
Endoro 13.06.2013 um 18:42:01 Uhr
Goto Top
Zitat von @hansbaer:
Wenn bei euren o.g. Lösungen bei ersten mal DSW aus der CSV in "alterText" geschrieben wird, findet die batch bei
der nächsten Änderung der CSV ja "alterText" nicht mehr.

Bei meiner Lösung wird die Variable core wieder gefunden, weil sie unverändert bleibt.

Gruss!
bastla
bastla 13.06.2013 um 19:16:11 Uhr
Goto Top
Hallo hansbaer!
Nur habe ich in meinem letzten beitrag leichtsinnigerweise die Dateiendung weggelassen
Gibt es vielleicht sonst noch etwas, das wir wissen sollten (und nicht ohnehin Deinem Eröffnungsbeitrag entnehmen können face-wink)?
Wenn bei euren o.g. Lösungen bei ersten mal DSW aus der CSV in "alterText" geschrieben wird, findet die batch bei der nächsten Änderung der CSV ja "alterText" nicht mehr.
Ist das eine Annahme oder Ergebnis Deiner Tests?

Gesucht wird durch beide Ansätze nach einer Zeile, die mit "D:\InfoMedia\Layout\TFTupdate" beginnt - das tut sie nach der Ergänzung durch "DSW" oder whatever ja immer noch ...

Damit der Dateityp auch geschrieben wird, wäre mein Script folgendermaßen abzuändern / zu ergänzen:
Ein = "D:\Deine.csv"  
Aus = "D:\Deine.txt"  
Zeile = 2
Spalte = 2
Delim = ";"  
Suche = "D:\InfoMedia\Layout\TFTupdate"  
Typ = ".exe"  

Set fso = CreateObject("Scripting.FileSystemObject")  
DatEin = Split(fso.OpenTextFile(Ein).ReadAll, vbNewline)
Wert = Split(DatEin(Zeile - 1), Delim)(Spalte - 1)

DatAus = Split(fso.OpenTextFile(Aus).ReadAll, vbNewline)

SLen = Len(Suche)
For i = 0 To UBound(DatAus)
    If Left(DatAus(i), SLen) = Suche Then DatAus(i) = Suche & Wert & Typ
Next
fso.CreateTextFile(Aus).Write Join(DatAus, vbNewline)
Grüße
bastla
hansbaer
hansbaer 13.06.2013 um 21:34:12 Uhr
Goto Top
grandios!
funktioniert genau so wie ich es brauche!
Danke!