114298

Erste Zeile einer Excel Datei vergleichen

Hallo zusammen,

ich habe folgendes Szenario.

Ich bekomme täglich eine .csv Datei zugeschickt. In der Datei sind nun in der Spalte A mehrere hundert Semikolon getrennt Datensätze enthalten.

Beispiel Zelle A1: Jahr;Monat;Tag;"Auftragsnummer";...
Beispiel Zelle A2: 2015;06;06;01983737;

Ich möchte nun prüfen ob die Datei der vereinbarten Spaltenstruktur entspricht.
Um die erste Spalte auszulesen, habe ich nun folgenden Code benutzt:

get-Content $Filepath -totalcount 1

In den Spaltenüberschriften sind auch zum Teil Anführungszeichen enthalten.
Nun bekomme ich am Anfang und am Ende des Ergebnisses und vor und nach den bereits vorhandenen Anführungszeichen weitere angezeigt.

Beispiel Zelle A1: Jahr;Monat;Tag;"Auftragsnummer";...
Ergebnis: "Jahr;Monat;Tag;""Auftragsnummer"";..."

Dadurch funktioniert mein Vergleich mit der Originalen Überschrift nicht.

Ich habe überlegt, die Anführungszeichen durch 'nichts' zu ersetzen, dann aber werden die Originalen Anführungszeichen auch ersetzt und der Vergleich schlägt wieder fehl.

Gibt es eventuell noch eine andere Möglichkeit die erste Zeile bzw. die eine Zelle zu vergleichen?

Beste Grüße
Memo
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 273935

Url: https://administrator.de/forum/erste-zeile-einer-excel-datei-vergleichen-273935.html

Ausgedruckt am: 28.04.2025 um 03:04 Uhr

114757
Lösung 114757 06.06.2015, aktualisiert am 10.06.2015 um 17:04:08 Uhr
Goto Top
Moin,
Nun bekomme ich am Anfang und am Ende des Ergebnisses und vor und nach den bereits vorhandenen Anführungszeichen weitere angezeigt.
Wieso ?? kann nicht sein ...du musst da was nicht richtig machen, das ist nämlich nicht normal das get-content da einfach selber was hinzufügen würde, das wäre ja fatal !

Doppelte Anführungszeichen lassen sich aber einfach durch einfache ersetzen, und die am Anfang und Ende entfernen:
((get-Content $Filepath -totalcount 1) -replace '""','"') -replace '^"|"$',''  
Aber wie gesagt, das wäre absolut nicht normal wenn get-Content da von selbst Anführungszeichen hinzufügen würde. Irgendwas hast du uns da bestimmt verschwiegen face-wink
Dadurch funktioniert mein Vergleich mit der Originalen Überschrift nicht.
Doch, wenn du beim Original ebenfalls die Anführungszeichen ersetzt face-smile.Es gibt 1001 Möglichkeiten ...

Gruß jodel32
114298
114298 07.06.2015 um 18:47:02 Uhr
Goto Top
Hi,

ich verschweige wirklich nichts ;P

Meine .csv in der Zelle A1 sieht so aus
Monat;Jahr;Tag;"Hallo"

Mein Code:
$Filepath = "Z:\Desktop\test.csv"
$Headline = (get-Content $Filepath -totalcount 1)
write-host $Headline

Die Ausgabe:
"Monat;Jahr;Tag;""Hallo"""

Mit deinem deinem Code funktioniert es. Kannst du mir aber bitte kurz erklären was das zweite -replace macht?

Grüße
Memo
114757
114757 07.06.2015 aktualisiert um 20:55:18 Uhr
Goto Top
Zitat von @114298:
Mein Code:
$Filepath = "Z:\Desktop\test.csv"
$Headline = (get-Content $Filepath -totalcount 1)
write-host $Headline

Die Ausgabe:
"Monat;Jahr;Tag;""Hallo"""
Dann muss dein File entweder ein komisches Encoding oder sonstige merkwürdige Eigenschaften haben, denn das ist mir in meiner Powershell-Zeit noch nie untergekommen, und kann es hier absolut nicht nachvollziehen, glaub mir ! Das darf nicht sein. Mach dir mal mit Notepad auf einem anderen Rechner eine Testdatei mit den Überschriften und für den Code auf dem anderen Rechner aus, dann wirst du sehen das es nicht mehr auftritt ...
Mit deinem deinem Code funktioniert es. Kannst du mir aber bitte kurz erklären was das zweite -replace macht?
Mit Regular Expressions das führende und abschließende Anführungszeichen entfernen.

Gruß jodel
colinardo
colinardo 07.06.2015 aktualisiert um 21:07:49 Uhr
Goto Top
Zitat von @114757:
Dann muss dein File entweder ein komisches Encoding oder sonstige merkwürdige Eigenschaften haben, denn das ist mir in meiner
Powershell-Zeit noch nie untergekommen, und kann es hier absolut nicht nachvollziehen, glaub mir ! Das darf nicht sein. Mach
dir mal mit Notepad auf einem anderen Rechner eine Testdatei mit den Überschriften und für den Code auf dem anderen
Rechner aus, dann wirst du sehen das es nicht mehr auftritt ...
Dem kann ich nur beipflichten. Da stimmt was bei dir mit der Textdatei nicht @114298 und ich mache ebenfalls sehr viel mit der Powershell.
Wäre mal interessant deine Powershell-Version und OS zu erfahren. Und das Encoding der Datei wäre auch interessant.
Aber ohne gepostete Originalzeile wird das hier vermutlich nicht aufzuklären sein ...

4d46781b076e147383521fc06925e33e

Grüße Uwe
114298
114298 07.06.2015 um 21:21:11 Uhr
Goto Top
Hi,

also ich benutze die Powershell 2.0
Ich habe das jetzt sowohl auf einem reinen Windows 7 Rechner als auch auf meinem Mac OS (virtuelle Maschine mit Windows 7 Home) ausprobiert, mit demselben Ergebnis.
Ich habe eben auch nochmal eine neue .csv erstellt, da werden auch die Anführungszeichen drangehängt.

Du hast es mit einer .txt ausprobiert sehe ich gerade. Da funktioniert es bei mir auch ganz normal ohne Anführungszeichen.

Kannst du es eventuell auch mal mit einer .csv versuchen. Das würde mich mal interessieren.

Danke für die Erklärung des zweiten -replace face-smile
colinardo
colinardo 07.06.2015 aktualisiert um 21:30:49 Uhr
Goto Top
CSV das selbe Ergebnis! Die Dateierweiterung ist aber bei gc egal, ist ja auch nur eine Textdatei und nichts anderes.

PS 2.0 da ist aber langsam mal ein Update fällig face-wink
114298
114298 10.06.2015 um 17:03:58 Uhr
Goto Top
Ich habe es jetzt auch mit PS 4.0 probiert. Da bekomme ich dasselbe Ergebnis.
Habe es jetzt mit dem -replace gelöst.

Besten Dank! face-smile

Grüße Memo
colinardo
colinardo 10.06.2015 aktualisiert um 20:09:19 Uhr
Goto Top
Zitat von @114298:
Ich habe es jetzt auch mit PS 4.0 probiert. Da bekomme ich dasselbe Ergebnis.
Normal ist es aber definitiv nicht !
AUßER die CSV-Dateien kommen direkt aus Excel, denn das stellt verdoppelt die Anführungszeichen...kannst du einfach feststellen indem du solch eine CSV mal in einem Texteditor öffnest.

Deswegen sollte man solche CSV-Dateien auch immer mit Import-CSV in Powershell laden.

Die korrekten Spaltennamen erhältst du dann so in einem Array:
$csv = Import-csv "C:\Test.csv" -Delimiter ";"  
$csv | gm -MemberType NoteProperty | select -Expand Name
Und kannst sie dann vergleichen, z.B. einfach und schnell gemacht mit compare-object

Grüße Uwe