therealerebos
Goto Top

Per Batch erste 7 Zeilen einer Datei löschen und Werte per Suchen Ersetzen ändern?

Hallo,

wie im Titel bereits geschrieben möchte ich eine CSV Datei bearbeiten damit ich diese in Access einlesen kann und zwar sollen im ersten Schritt die ersten 7 Zeilen der Datei gelöscht werden und dann in Schritt 2 das Textrennzeichen von Komma in Semikolon geändert werden sprich "," ersetzen durch ";" danach sollte die neue Datei in einem neuen Folder gespeichert werden so das Access diese dann einlesen kann. Die ursprüngliche Datei kann dann gelöscht werden und Access dann gestartet werden um den gespeicherten Import einzulesen.

Meine Frage ist das mit Batch alles realisierbar, oder gibt es da heutzutage bessere mittel / Wege?


Gruß

TheRealErebos

Content-Key: 1376844691

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

Printed on: April 27, 2024 at 23:04 o'clock

Mitglied: 149569
149569 Oct 11, 2021 updated at 12:17:23 (UTC)
Goto Top
Meine Frage ist das mit Batch alles realisierbar, oder gibt es da heutzutage bessere mittel / Wege?
Dafür nimmt man meist gleich die Powershell und keine Batch mehr
Get-Content 'D:\datei.csv' | select -skip 7 | ConvertFrom-CSV -Delimiter "," | export-csv 'D:\data\dateineu.csv' -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Obwohl man das auch direkt mit nem Access-Makro erledigen könnte ohne extra externes Skript face-wink.
Member: TK1987
TK1987 Oct 11, 2021 at 13:03:33 (UTC)
Goto Top
Moin,

Zitat von @149569:
 Get-Content 'D:\datei.csv' | select -skip 7 | ConvertFrom-CSV -Delimiter ","  
so werden die Inhalte von Zeile 8 aber als Header genommen - wenn dort dann 2 Zellen den gleichen Inhalt haben, fliegt einem das um die Ohren.

Würde daher besser wirklich einfach mit replace arbeiten
 (Get-Content 'D:\datei.csv' | select -skip 7).Replace(',',';') | Set-Content  'D:\data\dateineu.csv' -Encoding UTF8  

Gruß Thomas
Member: TheRealErebos
TheRealErebos Oct 11, 2021 updated at 13:38:49 (UTC)
Goto Top
Zitat von @149569:

Meine Frage ist das mit Batch alles realisierbar, oder gibt es da heutzutage bessere mittel / Wege?
Dafür nimmt man meist gleich die Powershell und keine Batch mehr
> Get-Content 'D:\datei.csv' | select -skip 7 | ConvertFrom-CSV -Delimiter "," | export-csv 'D:\data\dateineu.csv' -Delimiter ";" -NoTypeInformation -Encoding UTF8  
> 
Obwohl man das auch direkt mit nem Access-Makro erledigen könnte ohne extra externes Skript face-wink.


Ähm das wäre ja noch besser, habe da auch eben mal Google bemüht und dann auch die entsprechende Funktion in Access gefunden. Aber so wie ich das sehe kannst du da aber nicht mit Arbeiten, da ich nicht das Komma als Trennzeichen ersetzen kann und wenn ich Trennzeichen Komma und Dezimaltrennzeichen Komma habe (so wie es in der Originaldatei ist) dann weigert sich Access die Datei zu laden auch wenn ich das Texttrennzeichen " habe.

Weil ich finde hier nur AusführenGespeichertImportExport oder ImportierenExportierenText als Funktion für das Makro. Somit müsste die Datei immer noch vorher bearbeitet werden erste 7 Zeilen weg und "," durch ";" ersetzen da sonst , als Dezimaltrennzeichen ein Problem ist.

Oder übersehe ich da etwas?

Bin noch neu in Access war es nur leid die Daten immer Vorzuhalten das per Daten abrufen in Excel diese eingelesen werden können per aktualisieren. Weil meine Excel Datei dadurch extrem lange schon lädt,,,, daher möchte ich eine Datenbank als Quelle da er dann nicht immer die Werte neu einlesen muss aus x files...da ich diese x files in einer DB speichere...

Edit:

die Batch Datei wäre so ja okay da in Zeile 8 die Überschrift steht und da Amazon auch keine doppelten Spalten Werte hat. Sie packen einfach in die ersten 7 Zeilen eine Erklärung zur Datei, die ich nicht brauche. In PQ sage ich ihm dann einfach ab Zeile 1-7 ignorieren, die Funktion hatte ich in Access aber bisher nicht gesehen, daher Batch als Idee...
Mitglied: 149569
149569 Oct 11, 2021 updated at 13:37:12 (UTC)
Goto Top
Zitat von @TK1987:

Moin,

Zitat von @149569:
 Get-Content 'D:\datei.csv' | select -skip 7 | ConvertFrom-CSV -Delimiter ","  
so werden die Inhalte von Zeile 8 aber als Header genommen -
Ja davon war ich erst mal ausgegangen, da er nichts zum Inhalt geschrieben hat. Das lässt sich ja leicht ändern wenn er uns mehr erzählt face-smile.


Würde daher besser wirklich einfach mit replace arbeiten
 (Get-Content 'D:\datei.csv' | select -skip 7).Replace(',',';') | Set-Content  'D:\data\dateineu.csv' -Encoding UTF8  

Das fliegt einem aber auch noch mehr um die Ohren wenn dann Kommas innerhalb von den Werten ersetzt werden die in Anführungszeichen stehen und dann verfälschte Daten in der Datenbank landen face-wink.
Member: TheRealErebos
TheRealErebos Oct 11, 2021 at 13:36:35 (UTC)
Goto Top
Zitat von @TK1987:

Moin,

Zitat von @149569:
 Get-Content 'D:\datei.csv' | select -skip 7 | ConvertFrom-CSV -Delimiter ","  
so werden die Inhalte von Zeile 8 aber als Header genommen - wenn dort dann 2 Zellen den gleichen Inhalt haben, fliegt einem das um die Ohren.

Würde daher besser wirklich einfach mit replace arbeiten
 (Get-Content 'D:\datei.csv' | select -skip 7).Replace(',',';') | Set-Content  'D:\data\dateineu.csv' -Encoding UTF8  

Gruß Thomas

Replace wäre da ein Problemm da er dann auch die Dezimalwerte auf ; ändern würde sprich statt 12,88 12;88 z.b. das wäre Semioptimal face-wink
Member: TK1987
TK1987 Oct 11, 2021 updated at 13:48:20 (UTC)
Goto Top
Zitat von @149569:
Das fliegt einem aber auch noch mehr um die Ohren wenn dann Kommas innerhalb von den Werten ersetzt werden die in Anführungszeichen stehen und dann verfälschte Daten in der Datenbank landen face-wink face-wink.

Zitat von @TheRealErebos:
Replace wäre da ein Problemm da er dann auch die Dezimalwerte auf ; ändern würde sprich statt 12,88 12;88 z.b. das wäre Semioptimal face-wink
In dem Fall hat die Datei aber dann auch definitiv Feldbegrenzer, somit kann man das Ganze dann auch leicht so handhaben:
 (Get-Content 'D:\datei.csv' | select -skip 7) -Replace '(?<="),(?="|$)',';' | Set-Content  'D:\data\dateineu.csv' -Encoding UTF8  

Gruß Thomas
Member: TK1987
TK1987 Oct 11, 2021 at 14:05:52 (UTC)
Goto Top
Zitat von @TheRealErebos:
Edit:

die Batch Datei wäre so ja okay da in Zeile 8 die Überschrift steht [...]
Wenn dort die Header stehen ist das natürlich etwas anderes, dann kannst du den Codeschnipsel von @149569 natürlich nehmen.