POWERSHELL - Wahrscheinlich eine sehr Dumme Frage, aber das Ergebnis nervt mich unheimlich , Hilfe erbeten !!!
Der angeführte Code funktioniert mal einwandfrei !!
Die EXPORT Datei --- NEUE-0001.csv ist absolut richtig, keine Fehler bei der Erstellung !!
ABER NUN KOMMT EIN SCHÖNHEITSFEHLER DER MICH WAHNSINNIG MACHT !
Die erstellte CSV muss ich in OO Calc bzw. Excel öffnen !!
Alle Felder sind soweit ok --- IMPORT FILTER ---- Semikolon ---- Texttrenner: " --- UTF8
und jetzt hab ich folgendes alle Felder RICHTIG gefüllt .... nur alle Felder die eine Zahl enthalten haben nun ein ' !!!
In meinem Beispiel:
Max1 --- Inhalt: Test ---- OK
Max2 --- Inhalt: '9 ---- NICHT OK --- sollte nur 9 sein und Format sollte sein Zahl 1234
Max3 --- Inhalt: '-12,56 --- NICHT OK --- sollte nur -12,56 enthalten und Format sollte sein Zahl -123,45 (2 Nachkommastellen)
Wo kommt das blöde " ' " her ????
Entweder mach ich grundlegend was falsch oder ich denke inzwischen viel zu kompliziert !!!
Bitte um Hilfe !
Das sortieren dann nach Spalte Max2 funktioniert logischerweise nicht da es als STRING sortiert wird und nicht als ZAHL !
Ihr wisst sicher was ich meine , Danke .
Die EXPORT Datei --- NEUE-0001.csv ist absolut richtig, keine Fehler bei der Erstellung !!
$GanzeCSV = Import-Csv -Delimiter ';' -Encoding UTF8 -Path $Einlesepfad | Select Max1,Max2,Max3,Max4,Max5,Max6,Max7,Max8,Max9,Max10
$Ausgabepfad = $MF_Daten_Ordner + "\NEUE-0001.csv"
$line | Export-Csv -Path $Ausgabepfad -NoTypeInformation -delimiter ";" -Encoding "UTF8" -Append
ABER NUN KOMMT EIN SCHÖNHEITSFEHLER DER MICH WAHNSINNIG MACHT !
Die erstellte CSV muss ich in OO Calc bzw. Excel öffnen !!
Alle Felder sind soweit ok --- IMPORT FILTER ---- Semikolon ---- Texttrenner: " --- UTF8
und jetzt hab ich folgendes alle Felder RICHTIG gefüllt .... nur alle Felder die eine Zahl enthalten haben nun ein ' !!!
In meinem Beispiel:
Max1 --- Inhalt: Test ---- OK
Max2 --- Inhalt: '9 ---- NICHT OK --- sollte nur 9 sein und Format sollte sein Zahl 1234
Max3 --- Inhalt: '-12,56 --- NICHT OK --- sollte nur -12,56 enthalten und Format sollte sein Zahl -123,45 (2 Nachkommastellen)
Wo kommt das blöde " ' " her ????
Entweder mach ich grundlegend was falsch oder ich denke inzwischen viel zu kompliziert !!!
Bitte um Hilfe !
Das sortieren dann nach Spalte Max2 funktioniert logischerweise nicht da es als STRING sortiert wird und nicht als ZAHL !
Ihr wisst sicher was ich meine , Danke .
Please also mark the comments that contributed to the solution of the article
Content-Key: 571010
Url: https://administrator.de/contentid/571010
Printed on: April 26, 2024 at 13:04 o'clock
50 Comments
Latest comment
Zitat von @Stucky007:
Der angeführte Code funktioniert mal einwandfrei !!
Die EXPORT Datei --- NEUE-0001.csv ist absolut richtig, keine Fehler bei der Erstellung !!
Der angeführte Code funktioniert mal einwandfrei !!
Die EXPORT Datei --- NEUE-0001.csv ist absolut richtig, keine Fehler bei der Erstellung !!
>
> $GanzeCSV = Import-Csv -Delimiter ';' -Encoding UTF8 -Path $Einlesepfad | Select Max1,Max2,Max3,Max4,Max5,Max6,Max7,Max8,Max9,Max10
>
> $Ausgabepfad = $MF_Daten_Ordner + "\NEUE-0001.csv"
> $line | Export-Csv -Path $Ausgabepfad -NoTypeInformation -delimiter ";" -Encoding "UTF8" -Append
>
>
Kann er nicht, da fehlen eine Menge an Variablen ...
ABER NUN KOMMT EIN SCHÖNHEITSFEHLER DER MICH WAHNSINNIG MACHT !
Die erstellte CSV muss ich in OO Calc bzw. Excel öffnen !!
Alle Felder sind soweit ok --- IMPORT FILTER ---- Semikolon ---- Texttrenner: " --- UTF8
und jetzt hab ich folgendes alle Felder RICHTIG gefüllt .... nur alle Felder die eine Zahl enthalten haben nun ein ' !!!
In meinem Beispiel:
Max1 --- Inhalt: Test ---- OK
Max2 --- Inhalt: '9 ---- NICHT OK --- sollte nur 9 sein und Format sollte sein Zahl 1234
Max3 --- Inhalt: '-12,56 --- NICHT OK --- sollte nur -12,56 enthalten und Format sollte sein Zahl -123,45 (2 Nachkommastellen)
Wo kommt das blöde " ' " her ????
Wir kennen deine Ausgangsdaten nicht und was in deinen Variablen steht sieht hier auch niemand.Alle Felder sind soweit ok --- IMPORT FILTER ---- Semikolon ---- Texttrenner: " --- UTF8
und jetzt hab ich folgendes alle Felder RICHTIG gefüllt .... nur alle Felder die eine Zahl enthalten haben nun ein ' !!!
In meinem Beispiel:
Max1 --- Inhalt: Test ---- OK
Max2 --- Inhalt: '9 ---- NICHT OK --- sollte nur 9 sein und Format sollte sein Zahl 1234
Max3 --- Inhalt: '-12,56 --- NICHT OK --- sollte nur -12,56 enthalten und Format sollte sein Zahl -123,45 (2 Nachkommastellen)
Wo kommt das blöde " ' " her ????
Das ' benutzt Excel zum maskieren von Sonderzeichen womit der Inhalt der Zelle als Text interpretiert wird und z.B. nicht als Formel wenn ein z.B. ein Gleichheitszeichen am Anfang des Inhalts stünde.
Entweder mach ich grundlegend was falsch oder ich denke inzwischen viel zu kompliziert !!!
Bitte um Hilfe !
Helfe uns erst mal mit ein paar Beispielzeilen deiner Daten und die Variableninhalte.Bitte um Hilfe !
Das sortieren dann nach Spalte Max2 funktioniert logischerweise nicht da es als STRING sortiert wird und nicht als ZAHL !
Dazu kann man einen String in ein [int] oder [Double]oder [decimal] umwandeln dann klappt auch das Sortieren problemlos!
Ihr wisst sicher was ich meine , Danke .
Ja, wenn du mehr Infos über die Ausgangsdaten und deinen Variablen lieferst.p.s. Deine Ausrufezeichen- und Frage-Taste klemmt fest.
Zitat von @aqui:
Ist das Kisuaheli Sprache ?
Er bekommt die Strings nicht in die richtige Reihenfolge, hat er ja oben schon geschrieben 💉🚑um das Problem mit dem URSPRUNG der das nicht hat zu klären ! Danke im Moment ... SIEH selbst !
Bahnhof, Ägypten ?Ist das Kisuaheli Sprache ?
echo "";"";%%k;"";"MAXB01";"0";"MAXB02";"";%%l;"";%%n;"";!anz!;!var1!;%%j>>E:\000-Max\00-Daten\0000.csv
Meine Fresse (2.0) hier fehlt auch wieder alles was nötig ist um vernünftig zu helfen ....Deine Variableninhalte kennst nur du, und das ist kein Powershell sondern Batch, kann man ja gleich alles PS abfackeln anstatt so einen Mischmasch zu kotzen.
Lass dir $j in der Konsole ausgeben dann siehst du schon vorher was Sache ist.
Du verstehst falsch! Wir müssen um konkret zu helfen den INHALT der Variablen kennen und die verschweigst du uns nunmal schon zu Beginn, alter ich glaub bei dem ist heut schon Freitag. 🤒 Glaskugel polieren geh ...
Deine Daten haben wohl doppelte Anführungszeichen um die Zahlen, aber alles nur Spekulation da du uns offensichtlich nicht aufklären willst.
Deine Daten haben wohl doppelte Anführungszeichen um die Zahlen, aber alles nur Spekulation da du uns offensichtlich nicht aufklären willst.
Zitat von @Stucky007:
So sehen die Zahlen dann aus ! NEUE-0000.csv
und so sieht die 0000.csv aus die ich im Batch erstellt habe
Entschuldige bitte , wenn wir unfähig sind, Dir zu folgen ....So sehen die Zahlen dann aus ! NEUE-0000.csv
und so sieht die 0000.csv aus die ich im Batch erstellt habe
Neu, neuer, am neusten
Null, nuller, am nullsten ...
Könntest Du das bitte mal in "vorher" und "nachher" auflösen oder besser noch in "vor Schritt 1", "nach Schritt 1", "nach Schritt 2" usw.?
Was mich wundert: In beiden von Dir geposteten Versionen ist kein Header zu sehen ...?
Moin,
"Max1";"Max2";"Max3";"Max4";"Max5";"Max6";"Max7";"Max8";"Max9";"Max10";"Max11";"Max12";
Mein Excel 2013 importiert das ohne Zicken. Zahlen sind Zahlen. Datumsangaben sind Datumsangaben. Ich musste noch nicht einmal festlegen, wie der Delimter heißt oder welches Format die Zellen haben sollten. Hast Du es mal mit einer anderen Excel-Installation auf einem anderen Rechner versucht? Ich vermute den Fehler auf Seiten Excels. Das Verhalten ist jedenfalls vollkommen ungewöhnlich.
Liebe Grüße
Erik
"Max1";"Max2";"Max3";"Max4";"Max5";"Max6";"Max7";"Max8";"Max9";"Max10";"Max11";"Max12";
"";"";"02.01.2020";"";"Max01";"0";"Max02";"";"141,00";"";"02.01.2020 00:39:48:881";"";
"";"";"02.01.2020";"";"Max01";"0";"Max01";"";"130,00";"";"02.01.2020 00:43:26:818";"";
"";"";"02.01.2020";"";"Max01";"0";"Max01";"";"-34,00";"";"02.01.2020 00:51:56:895";"";
So sehen die Zahlen dann aus ! NEUE-0000.csv
"";"";"02.01.2020";"";"Max01";"0";"Max01";"";"130,00";"";"02.01.2020 00:43:26:818";"";
"";"";"02.01.2020";"";"Max01";"0";"Max01";"";"-34,00";"";"02.01.2020 00:51:56:895";"";
So sehen die Zahlen dann aus ! NEUE-0000.csv
Mein Excel 2013 importiert das ohne Zicken. Zahlen sind Zahlen. Datumsangaben sind Datumsangaben. Ich musste noch nicht einmal festlegen, wie der Delimter heißt oder welches Format die Zellen haben sollten. Hast Du es mal mit einer anderen Excel-Installation auf einem anderen Rechner versucht? Ich vermute den Fehler auf Seiten Excels. Das Verhalten ist jedenfalls vollkommen ungewöhnlich.
Liebe Grüße
Erik
Zitat von @Stucky007:
Sorry in Excel, OpenOffice Calc und in LibreOffice
Importfilter : semikolon , utf8 , Texttrenner: "
Bei allen "02.01.2020" wird zu '02.01.2020
"141,00" wird zu '141,00
Timestamp ebenfalls mit ' am Anfang !
Lass den Texttrenner für den Import mal weg, oder öffne die CSV direkt über Doppelklick, ansonsten wohl fehlerhafte Regionseinstellungen im OS, oder Kodierungsproblem, klappt hier ebenfalls problemlos.Sorry in Excel, OpenOffice Calc und in LibreOffice
Importfilter : semikolon , utf8 , Texttrenner: "
Bei allen "02.01.2020" wird zu '02.01.2020
"141,00" wird zu '141,00
Timestamp ebenfalls mit ' am Anfang !
aber warum schreibt mir PS überhaupt die Zahlen in " " waren ja in der Ausgangsdatei 0000.csv auch nicht !!!!
Das ist in der Powershell normal und macht keinen Unterschied, das fasst alle Daten immer in Anführungszeichen beim Export.Das letzte ";" in jeder Zeile ist auch überflüssig wenn dort kein Fehler mehr ist.
Zitat von @Stucky007:
ok das probier mal ....
dennoch stellt sich die Frage: das kann ich in PS nicht abstellen ?
Nein nicht mit Parametern. Du musst dann stattdessen ConvertTo-CSV benutzen und die Zeichen per Replace durch nichts ersetzen und das ganze per out-file in eine Datei befördern.ok das probier mal ....
dennoch stellt sich die Frage: das kann ich in PS nicht abstellen ?
Löse das Problem in deinem OS, das wäre zielgerichteter, statt solche Fummellösungen zu produzieren, denn bei uns allen geht es ja einwandfrei auch ohne irgendwelche Workarounds. Excel erkennt automatisch das es sich um Zahlen handelt auch wenn diese in Anführungszeichen stehen.
Zitat von @Stucky007:
aber warum schreibt mir PS überhaupt die Zahlen in " " waren ja in der Ausgangsdatei 0000.csv auch nicht !!!!
Wenn ich jetzt nichts durcheinander bringe, dann sind die "" an den Zahlen bereits vorher drin.aber warum schreibt mir PS überhaupt die Zahlen in " " waren ja in der Ausgangsdatei 0000.csv auch nicht !!!!
"";"";02.01.2020;"";"Max01";"0";"Max01";"";141,00;"";02.01.2020 00:39:48:881;"";
Siehe z.B. "0"
Moin,
Bei mir nicht. Ich habe jetzt genau Deinen Code und Deine Beispieldaten genommen. Geht ohne Probleme. Excel fragt bei der erzeugten Datei nach der Codierung und dem Delimiter wie gewohnt und nach dem Import sind die Zahlen Zahlen und das Datum ist ein Datum. Nur das
wird von Excel nicht als Zeitangabe erkannt, weil es für Excel keine gültige Zeit ist.
Weil es nur dann ein gültiges CSV ist. Die meisten Anwendungen sind da fehlertolerant. Aber wenn man " um die Daten setzt, dann macht man das üblicherweise bei allen Daten.
Liebe Grüße
Erik
Zitat von @Stucky007:
Sorry in Excel, OpenOffice Calc und in LibreOffice
Importfilter : semikolon , utf8 , Texttrenner: "
Bei allen "02.01.2020" wird zu '02.01.2020
"141,00" wird zu '141,00
Timestamp ebenfalls mit ' am Anfang !
Sorry in Excel, OpenOffice Calc und in LibreOffice
Importfilter : semikolon , utf8 , Texttrenner: "
Bei allen "02.01.2020" wird zu '02.01.2020
"141,00" wird zu '141,00
Timestamp ebenfalls mit ' am Anfang !
Bei mir nicht. Ich habe jetzt genau Deinen Code und Deine Beispieldaten genommen. Geht ohne Probleme. Excel fragt bei der erzeugten Datei nach der Codierung und dem Delimiter wie gewohnt und nach dem Import sind die Zahlen Zahlen und das Datum ist ein Datum. Nur das
02.01.2020 00:51:56:895
wird von Excel nicht als Zeitangabe erkannt, weil es für Excel keine gültige Zeit ist.
aber warum schreibt mir PS überhaupt die Zahlen in " " waren ja in der Ausgangsdatei 0000.csv auch nicht !!!!
Weil es nur dann ein gültiges CSV ist. Die meisten Anwendungen sind da fehlertolerant. Aber wenn man " um die Daten setzt, dann macht man das üblicherweise bei allen Daten.
Liebe Grüße
Erik
@erikro
Na ja, Excel sollte schon "1" als Text importieren (also mit Hochkomma) und 1 als "echte" Zahl.
Na ja, Excel sollte schon "1" als Text importieren (also mit Hochkomma) und 1 als "echte" Zahl.
Btw. "02.01.2020 00:39:48:881" ist auch kein gültiges Date/Time Format, der letzte Doppelpunkt müsste korrekterweise dann ein Punkt sein, dann wird auch das korrekt erkannt.
PEBKAC
PEBKAC
Zitat von @emeriks:
@erikro
Na ja, Excel sollte schon "1" als Text importieren (also mit Hochkomma) und 1 als "echte" Zahl.
@erikro
Na ja, Excel sollte schon "1" als Text importieren (also mit Hochkomma) und 1 als "echte" Zahl.
Warum? CSV kennt keine Formate. Das ist immer reiner Text. Die Anführungszeichen dienen ja nur dazu, den Beginn und das Ende des Datums zu kennzeichnen, damit man auch den Delimiter als Dateninhalt benutzen kann. Wäre der Delimiter z. B. ein Komma, dann müsste ich nach deutscher Art geschriebene Zahlen in Tüttelchen einfassen.
Excel importiert das und interpretiert die eingehenden Daten. Bisher hat Excel bei mir Zahlen immer als Zahlen importiert und Zeitangaben immer als Zeitangaben, sofern sie den in Excel gültigen Formaten entsprechen. Das macht es nur dann anders, wenn ich das beim Import explizit angebe und von "Standard" auf "Text" im dritten Importdialog umstelle.
nur PS setzt beim Export die " " zwingend
Gut so, entspricht guten CSV Gepflogenheiten! Pack mal ein Semikolon in dein reinen Daten, was würde passieren wenn du da keine Anführungszeichen setzen würdest, peng ... Der Mischmasch ohne und mit Anführungszeichen führt immer mal wieder zu Problemen.Nur die Träne bleibt weil PS im prinzip das nicht tun sollte !!
Deiner Ansicht nach, entspricht aber den gängigen Regeln und hatte ich auch noch nie Probleme mit. Wenn du es anders haben willst kannst du es jederzeit mit ConvertTO-CSV und String-Bearbeitung selbst machen. DIe PS kann nicht jeden Furz als Wunsch berücksichtigen, dazu ist es eine Skriptsprache bei der man sich selbst behelfen kann.Verrätst Du uns das auch?
Zitat von @Stucky007:
Erkennung passt alles !
Nur das das PS Script alle Felder in " " schreibt ist unnötig !!!
Erkennung passt alles !
Nur das das PS Script alle Felder in " " schreibt ist unnötig !!!
Nein, das entspricht dem allgemeinen Gebrauch. Deshalb wird das von der PS auch so gemacht.
Zitat von @Stucky007:
glaub mir soll sie auch nicht !!!!
Wenn es so ist ist es so, hab kein Problem damit solang der Import danach geht und der geht jetzt.
Natürlich wär mir lieber ich könnte in PS folgendes machen:
der Eingang immer noch meine Datei als CVS aber dann eine Struktur aufbauen wie folgt:
1. Feld INT
2. Feld STR
3. Feld DEC(5,2)
diese füllen und dann ausgeben muss keine CSV sein , dass wäre mehr als genial ! Smile
danke noch mal
glaub mir soll sie auch nicht !!!!
Wenn es so ist ist es so, hab kein Problem damit solang der Import danach geht und der geht jetzt.
Natürlich wär mir lieber ich könnte in PS folgendes machen:
der Eingang immer noch meine Datei als CVS aber dann eine Struktur aufbauen wie folgt:
1. Feld INT
2. Feld STR
3. Feld DEC(5,2)
diese füllen und dann ausgeben muss keine CSV sein , dass wäre mehr als genial ! Smile
danke noch mal
Dann mache doch gleich eine Excel-Datei daraus. Dafür gibt es ein tolles Modul:
https://www.powershellgallery.com/packages/ImportExcel/7.0.1
Es wäre auch ganz toll, wenn Du in Deinen Antworten angeben würdest, wem Du gerade antwortest und/oder mit wem Du gerade sprichst. Dann erspart man sich das Scrollen um im Baum nachzusehen, welche Deiner Kommentare auf was/an wen antwortet.
Zitat von @Stucky007:
Also bitte du siehst meine EINGANGSDATEI da sind keine " " bei den Zahlen !!!!
Kopie von oben nochmal schau mal hin !!
"";"";02.01.2020;"";"Max01";"0";"Max01";"";141,00;"";02.01.2020 00:39:48:881;"";
Ja. ";" ist das Trennzeichen. UndAlso bitte du siehst meine EINGANGSDATEI da sind keine " " bei den Zahlen !!!!
Kopie von oben nochmal schau mal hin !!
"";"";02.01.2020;"";"Max01";"0";"Max01";"";141,00;"";02.01.2020 00:39:48:881;"";
;"0";
bedeutet dann, dass die 0 in "" steht.
Export-CSV hat einen Parameter
-QuoteFields
Specifies the names of the columns that should be quoted. When this parameter is used, only the specified columns are quoted.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...Specifies the names of the columns that should be quoted. When this parameter is used, only the specified columns are quoted.
Zitat von @emeriks:
Export-CSV hat einen Parameter
Export-CSV hat einen Parameter
-QuoteFields
Specifies the names of the columns that should be quoted. When this parameter is used, only the specified columns are quoted.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...Specifies the names of the columns that should be quoted. When this parameter is used, only the specified columns are quoted.
Aber erst ab Version 7.
Zitat von @erikro:
Aber erst ab Version 7.
Mit n büschen Regex macht man sich's selbst, für die Zahlen (Regex dafür hier als Beispiel nur vereinfacht)Zitat von @emeriks:
Export-CSV hat einen Parameter
Export-CSV hat einen Parameter
-QuoteFields
Specifies the names of the columns that should be quoted. When this parameter is used, only the specified columns are quoted.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...Specifies the names of the columns that should be quoted. When this parameter is used, only the specified columns are quoted.
Aber erst ab Version 7.
($csvobject | ConvertTo-CSV -Delimiter ";") -replace '"([\d\.,\-\+]+)"','$1'