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-Key: 207903

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

Printed on: April 18, 2024 at 01:04 o'clock

Member: bastla
bastla Jun 12, 2013 at 14:49:16 (UTC)
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
Member: hansbaer
hansbaer Jun 12, 2013 at 14:59:46 (UTC)
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
Member: bastla
bastla Jun 12, 2013 at 15:08:20 (UTC)
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
Member: Endoro
Endoro Jun 12, 2013 at 15:08:30 (UTC)
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!
Member: hansbaer
hansbaer Jun 12, 2013 at 16:25:27 (UTC)
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..
Member: bastla
bastla Jun 12, 2013 at 17:52:09 (UTC)
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
Member: Endoro
Endoro Jun 12, 2013 updated at 18:12:13 (UTC)
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!
Member: hansbaer
hansbaer Jun 12, 2013 at 18:50:06 (UTC)
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.
Member: bastla
bastla Jun 12, 2013 updated at 19:42:15 (UTC)
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
Member: Endoro
Endoro Jun 12, 2013 at 21:07:43 (UTC)
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!
Member: hansbaer
hansbaer Jun 13, 2013 at 14:52:39 (UTC)
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!
Member: Endoro
Endoro Jun 13, 2013 at 16:42:01 (UTC)
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!
Member: bastla
bastla Jun 13, 2013 at 17:16:11 (UTC)
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
Member: hansbaer
hansbaer Jun 13, 2013 at 19:34:12 (UTC)
Goto Top
grandios!
funktioniert genau so wie ich es brauche!
Danke!