addison
Goto Top

Per .bat oder .vbs 2 Spalten mit jeweils gleichem inhalt in eine vorhande csv Datei einfügen

Hi@all

Ich habe folgendes Problem:

ich benötige ein Script, das in eine vorhandene Datei 2 Spalten einfügt und diese mit einem Bestimmten Wert füllt.

Leider habe ich von der Programiersprache nur Newbiekenntnisse.

die Suche hat mich auch nicht wirklich weitergebracht.

ich habe eine .txt date mit Semikolon getrennt, bei der ich in jeder Zeile zwei spalten einfügen möchte die mit dem gleichen Werten gefüllt werden.


Beispiel:


SpalteA;SpalteB;SpalteC;SpalteD;
test1;test2;test3;
test4;test5;test6;

jetzt möchte ich vor Spalte A noch zwei weitere Spalten eingefügt haben die dann Lauten Name1;Name2;

Name1 und Name2 soll in allen Zeilen derselbe bleiben.

'Wäre super wenn mir da jemand helfen könnte.

Idealerweise auch mir erklärung des scriptes, damit ich auch was lernen kann face-wink

Content-ID: 143969

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

60730
60730 01.06.2010 um 14:00:10 Uhr
Goto Top
Servus,

das sollte man relativ einfach mit den suchwörtern csv suchen ersetzen hier finden können.

Für eine einzelne .txt wird sich keiner die Mühe machen ein script zu schreiben, sondern:

  • diese txt in Excel importieren
  • die beiden Spalten dazumachen
  • mit einem Autowert füllen
  • als .txt exportieren

Ist bedeutend einfacher, sauberer (denn auch scripte machen nur das, was Sie sollen) und ressourcenschonender für alle face-wink

Gruß
Addison
Addison 01.06.2010 um 14:04:38 Uhr
Goto Top
ich muss das nicht nur einmal machen, sondern am laufendem Band.

Die Grunddatei bleibt immer dieselbe nur mit anderem Inhalt.

Klar könnte ich jedesmal mit Excel arbeiten, aber das nervt auf die Dauer Darum will ich es mir mit einem Script vereinfachen.
schuhmann
schuhmann 01.06.2010 um 14:13:32 Uhr
Goto Top
Benutz doch einfach in Excel den Makrorekorder.
Starte die Aufnahme, öffne deine Datei, Text in Spalten, 2 Spalten einfügen, Text eingeben, Ausfüllen.
Sollte ziemlich fix gehen.
Addison
Addison 01.06.2010 um 14:19:39 Uhr
Goto Top
Ich möchte doch einfach nur ein Script oder eine Anleitung, oder einen Link wie ich das realisieren kann. face-sad

Klar kann ich das auch über ein Makro ausführen, aber dann muss ich jedesmal Excel öffnen die txt Datei importieren, das makro drüber laufen lassen, die datei schließen.

das würde länger dauern als wenn ich einen doppelklick auf ein Icon auf meinem Desktop mache.
schuhmann
schuhmann 01.06.2010 um 14:25:25 Uhr
Goto Top
Das kannst du doch alles mit nem Makro machen.
Erstell dir einfach eine Makro.xls.
Dann machst du ein Makro und nennst es Auto_open. Dadurch wird das Makro direkt gestartet sobald du die XLS aufrufst.
Mit dem Makro kannst du dann deine txt öffnen, einlesen,....
Dann kannst du mit dem Makro Speichern unter machen und die Arbeitsmappe und Excel wieder schließen lassen mit close.
Alles voll automatisch. Du musst dann nur deine XLS andrücken und der Rest geht automatisch.
Biber
Lösung Biber 01.06.2010, aktualisiert am 13.04.2015 um 09:54:31 Uhr
Goto Top
Moin Addison,

ich weiss jetzt nicht, warum die Jungs & Mädels dir nun unbedingt eine turbodynamische Dreigang-Sensitiv-Automatik andrehen wollen.

Demo am CMD-Prompt:
> rem Originaldatei
>for /f "delims=" %i in (e:\schnipsel\addison.csv) do @echo %i
SpalteA;SpalteB;SpalteC;SpalteD;
test1;test2;test3;
test4;test5;test6;


> REM Zwei konstante neue "Spalten" dazugemogelt.
>for /f "delims=" %i in (e:\schnipsel\addison.csv) do @echo Name1;Name2;%i
Name1;Name2;SpalteA;SpalteB;SpalteC;SpalteD;
Name1;Name2;test1;test2;test3;
Name1;Name2;test4;test5;test6;

Das Ergebnis wird jetzt ja auf den Bildschirm ausgegeben.
--> also sollte noch ans Ende der Zeile ein Umleitungsbefehl wie z.B. >X:\ErweiterteDateien\NeueAddison.csv

Als Batchvariante wären zwei Prozentzeichen statt eines vonnöten bei der Laufvariablen %i.

Grüße
Biber
60730
60730 01.06.2010 um 14:44:56 Uhr
Goto Top
Zitat von @Biber:
Moin Addison,

ich weiss jetzt nicht, warum die Jungs & Mädels dir nun unbedingt eine turbodynamische Dreigang-Sensitiv-Automatik
andrehen wollen.

Salü Biber,

weil es einfacher ist face-wink
Ok "Noch" einfacher ists natürlich sich den bequemen, schreib mal und schreibs dann bitte auch so, dass ich was lerne Vollautomatikkurs zu wählen face-wink

Grüße
Biber

zurück
Addison
Addison 01.06.2010 um 14:50:53 Uhr
Goto Top
ich hab zwar keine Ahnung was du für ein Problem hast aber gesucht habe ich schon eine Menge. ich habe nur leider nicht die Programierkenntnisse die ich hierfür bräuchte.

Aber es gibt ja zum Glück Leute die Hilfreich sind.

ich will kein fertiges Script, es reicht mir wenn ich Tipps bekomme mit welchen Behfehlen ich das hinbekomme.

@Biber Vielen Dank ich probier gleich mal aus.
60730
60730 01.06.2010 um 15:00:28 Uhr
Goto Top
Zitat von @Addison:
ich hab zwar keine Ahnung was du für ein Problem hast

"entspann" dich mal face-wink
ich hab nur das "Problem" dass ich nebenbei auch arbeite und mit einer Zeile die da sinnngemäß lautet:
Ich hab eine .txt möglicherweise etwas anderes interpretiert habe, das du gemeint hast.

aber gesucht habe ich schon eine Menge
Naja aber bestimmt nicht hier mit den oben von mir genannten Suchwörtern face-wink
Es gab mal eine Zeit, da wurden unsere fleissigen Biber & Bastla tagtäglich mit immer den gleichen "such mir was und ersetze es" vollgeschrieben ;-(

ich habe nur leider nicht die Programierkenntnisse die ich hierfür bräuchte.

Nungut, aber die häts ja mit dem suchen auch nicht gebraucht face-wink

Aber es gibt ja zum Glück Leute die Hilfreich sind.

Bin ich eigentlich üblicherweise auch, aber manchmal kommt einem die eigene Arbeit dazwischen.
Und auch Biber hat dir einen Bärendienst erwiesen - denn ohne eine Abfrage, ob denn diese .txt bereits die zusätzlichen Werte hat und in dem Fall nix zu tun ist - würde ich das nicht machen face-wink

ich will kein fertiges Script, es reicht mir wenn ich Tipps bekomme mit welchen Behfehlen ich das hinbekomme.

Gib mal:
find /?
sowohl in der Dosbox, als auch hier in der Suche ein.

Gruß
77559
77559 01.06.2010 um 15:38:10 Uhr
Goto Top
Zitat von @60730:
Gib mal:
find /?
sowohl in der Dosbox, als auch hier in der Suche ein.
Hallo @ All,

Da "DosBox" ja inzwischen als 3rd Party Programm existiert, würde ich eine Bezeichnung "Eingabeaufforderung", "Console" oder "CMD-Shell" dem eher unprofessionellen DosBox vorziehen face-wink

Konkret wäre hier, das ja auch nur eine der neuen Spalten vorhanden sein könnte, findstr geeigneter.

Echo off
:: Dateiname zum Erweitern per Parameter übergeben
Set "InFile=%~1"   
:: Neuer Dateiname mit angehängtem _X
Set "OutFile=%~dpn1_X%~x1"  
:: Erste Zeile (Header) Einlesen
Set /P Header=<"%InFile%"  
:: Prüfen ob neue Spalten schon im Header vorhanden, wenn ja Hinweis und Exit
Echo %Header%|Findstr /i "Name1 Name2" >NUL 2>&1 && (Echo Spalten schon da&Exit /B 1)  
:: Neue Datei zurücksetzen
Type NUL >"%OutFile%"  
:: Allen Zeilen neue Spalten voranstellen
for /f "usebackq delims=" %%A in ("%InFile%") do >>"%OutFile%" Echo Name1;Name2;%%A  
:: Testausgabe alte und neue Datei
type "%InFile%" "%OutFile%"  

Gruß
LotPings

Edit: PS: Für nicht im Programmieren bewanderte wäre ein Programm wie CSV-Editor noch zu empfehlen.
Addison
Addison 01.06.2010 um 15:47:44 Uhr
Goto Top
@Timo

sorry sollte kein Angriff sein.

ich habe heut schon über ne stunde gegoogelt und nix brauchbares für mein Prob. gefunden, sondern nur ähnliches, wobei die Befehle mir noch fremd sind.
Addison
Addison 01.06.2010 um 16:23:26 Uhr
Goto Top
for /f "delims=" %%i in (c:\test\a.txt) do @echo Name1;Name2;%%i>c:\Test\test.txt

klappt wunderbar!!!

nur leider nimmt er nur die letzte Zeile aus meiner Ursprungsdatei face-sad
schuhmann
schuhmann 01.06.2010 um 16:39:38 Uhr
Goto Top
du musst ein >> bei der Ausgabe machen, also >>C:\test\test.txt
">" ist ersetzen
">>" ist anhängen
60730
60730 01.06.2010 um 16:51:14 Uhr
Goto Top
Zitat von @77559:
Da "DosBox" ja inzwischen als 3rd Party Programm existiert, würde ich eine Bezeichnung "Eingabeaufforderung", "Console" oder "CMD-Shell" dem eher unprofessionellen DosBox vorziehen face-wink

[OT]
naa gut, aber ich nenne trotzdem immer noch so, auch wenn irgendwann einer der beiden Klitsch Kos ne Bude aufmacht und die so nennt - mir egal face-wink
Edit: PS: Für nicht im Programmieren bewanderte wäre ein Programm wie CSV-Editor noch zu empfehlen.

Nö - der ist auch für im programmieren - *hust* scripten bewanderte durchaus ein nettes Werkzeug.
[/OT]

Ob nun find oder findstr ist in dem fall doch Jacke wie Hose face-wink
Addison
Addison 01.06.2010 um 16:54:46 Uhr
Goto Top
Vielen Dank!!! so ists Perfekt face-smile
Biber
Biber 02.06.2010 um 10:35:21 Uhr
Goto Top
Moin Addison,

auch wenn schon alles "gelöst" ist, noch eine Ergänzung zum Neuerstellen/Anfügen mot den Pipes ">" und ">>".

Bei der ">>"-Variante, die du jetzt (noch zu deiner Zufriedenheit) verwendest, werden neue Zeilen an eine vorhandene Datei dieses Namens angehängt.
Okay, natürlich nur dann, wenn denn bereits eine existiert - sonst wird eine eine neue erstellt.

Falls du aber in deinem Szenario aus Versehen deinen Oneliner 2x startest, dann hast du bei 100 Original-Zeilen dann 200 mutierte Zeilen in deiner neuen Textdatei.

Deshalb würde ich schon die ">" [=Neuerstellen] statt ">>" [=Anfügen]-Pipe verwenden.

Alledings soll sich die ">"-Pipe ja auf das Ergebnis der gesamten FOR-Anweisung beziehen, also musst du das auch dadurch deutlich machen, dass du die ganze FOR-Anweisung [quasi als Gesamtkunstwerk face-wink ] in Klammern setzt.

Demo:
<code plain>
for /f "delims=" %i in (e:\schnipsel\addison.csv) do @echo Name1;Name2;%i
Name1;Name2;SpalteA;SpalteB;SpalteC;SpalteD;
Name1;Name2;test1;test2;test3;
Name1;Name2;test4;test5;test6;

(=10:32:00 D:\temp=)
(for /f "delims=" %i in (e:\schnipsel\addison.csv) do @echo Name1;Name2;%i) >AddisonNeu.csv

(=10:32:46 D:\temp=)
type AddisonNeu.csv
Name1;Name2;SpalteA;SpalteB;SpalteC;SpalteD;
Name1;Name2;test1;test2;test3;
Name1;Name2;test4;test5;test6;


Grüße
Biber
77559
77559 06.06.2010 um 13:46:37 Uhr
Goto Top
Zitat von @60730:
Hab das erst jetzt registriert,
Ob nun find oder findstr ist in dem fall doch Jacke wie Hose face-wink
nicht ganz, bei der Oder-Abfrage von zwei Begriffen kommt einem da "findstr.exe" by default sehr entgegen.

Gruß
LotPings