114298
Goto Top

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

Content-Key: 273935

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

Printed on: April 24, 2024 at 20:04 o'clock

Mitglied: 114757
Solution 114757 Jun 06, 2015, updated at Jun 10, 2015 at 15:04:08 (UTC)
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
Mitglied: 114298
114298 Jun 07, 2015 at 16:47:02 (UTC)
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
Mitglied: 114757
114757 Jun 07, 2015 updated at 18:55:18 (UTC)
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
Member: colinardo
colinardo Jun 07, 2015 updated at 19:07:49 (UTC)
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
Mitglied: 114298
114298 Jun 07, 2015 at 19:21:11 (UTC)
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
Member: colinardo
colinardo Jun 07, 2015 updated at 19:30:49 (UTC)
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
Mitglied: 114298
114298 Jun 10, 2015 at 15:03:58 (UTC)
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
Member: colinardo
colinardo Jun 10, 2015 updated at 18:09:19 (UTC)
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