franz-josef-ii
Goto Top

Powershell - Zeilen in einer csv löschen bis

Hello alle miteinander

Ich versuche mich (noch immer face-wink noch nicht aufgegeben) im scripten mit der Powershell. Jetzt habe ich folgendes Problem, mir fehlt ein Befehl (falls es ihn gibt face-wink ):

Ich habe mit dumpedid eine csv erstellt, die nicht benötigten Zeilen gelöscht, benötigte eingefügt, geht erstaunlich gut, außer einer Sache:

Es gibt folgende Daten:

DumpEDID v1.05
*
Active : Yes
Registry Key: ....
*
*
Active : No
Registry Key : .....
*
*

Ich möchte jetzt, daß die Powershell sobald sie den Eintrag "Active : No" sieht alles zwischen den Sterndln löschen, ob mit oder ohne ist nicht so wichtig, Zeilen löschen, wo kein " : " drinnen ist schaffe ich face-wink jedoch das "Zeilen löschen bis zum Zeichen * " da habe ich jetzt lange gesucht und nichts gefunden.

Nachdem die Verarbeitung der Datei mit der powershell erfolgt sollte es eben ein "Powershellvariante" sein.

Ein Link auf eine Seite wo dies beschrieben ist, vielleicht mit anderen (guten) Tipps ist ebenfalls willkommen.

Danke
Franz

Content-Key: 315216

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

Printed on: April 25, 2024 at 10:04 o'clock

Mitglied: 129813
129813 Sep 14, 2016 updated at 09:36:16 (UTC)
Goto Top
Zitat von @Franz-Josef-II:
Es gibt folgende Daten:

DumpEDID v1.05
*
Active : Yes
Registry Key: ....
*
*
Active : No
Registry Key : .....
*
*

Hi

This is definitely no valid CSV, so please post a complete example in Code-Tags

Thanks!

Regards
Member: Franz-Josef-II
Franz-Josef-II Sep 14, 2016 at 09:48:17 (UTC)
Goto Top
Hi

Why do you need the complete csv? But no problem, here it is.

Excuse my bad english, i know it's a little broken face-wink


DumpEDID v1.05
Copyright (c) 2006 - 2015 Nir Sofer
Web site: http://www.nirsoft.net
******************************************************************
Active                   : No
Registry Key             : DISPLAY\DEL4023\4&4d7f119&0&UID16843008
Monitor Name             : DELL 1708FP
Serial Number            : FP1817BBAAV6
Manufacture Week         : 30 / 2008
ManufacturerID           : 44048 (0xAC10)
ProductID                : 16420 (0x4133)
Serial Number (Numeric)  : 1111642789 (0x42425345)
EDID Version             : 1.3
Display Gamma            : 2.20
Vertical Frequency       : 56 - 76 Hz
Horizontal Frequency     : 30 - 81 KHz
Maximum Image Size       : 34 X 27 cm (17.1 Inch)
Maximum Resolution       : 1280 X 1024
Support Standby Mode     : Yes
Support Suspend Mode     : Yes
Support Low-Power Mode   : Yes
Support Default GTF      : No
Digital                  : No
Supported Display Modes  :
     720 X  400  70 Hz
     640 X  480  60 Hz
     640 X  480  75 Hz
     800 X  600  60 Hz
     800 X  600  75 Hz
    1024 X  768  60 Hz
    1024 X  768  75 Hz
    1152 X  864  75 Hz
    1280 X 1024  60 Hz
    1280 X 1024  75 Hz
*****************************************************************
*****************************************************************
Active                   : Yes
Registry Key             : DISPLAY\HSD05C6\4&4d7f119&0&UID16843008
Monitor Name             : JC198D
Serial Number            : 628GM30JA0458
Manufacture Week         : 28 / 2006
ManufacturerID           : 25634 (0x6422)
ProductID                : 1478 (0x05C6)
Serial Number (Numeric)  : 143 (0x0000008F)
EDID Version             : 1.3
Display Gamma            : 2.20
Vertical Frequency       : 50 - 76 Hz
Horizontal Frequency     : 30 - 83 KHz
Maximum Image Size       : 38 X 30 cm (19.1 Inch)
Maximum Resolution       : 1280 X 1024
Support Standby Mode     : No
Support Suspend Mode     : No
Support Low-Power Mode   : Yes
Support Default GTF      : No
Digital                  : No
Supported Display Modes  :
     720 X  400  70 Hz
     640 X  480  60 Hz
     640 X  480  67 Hz
     640 X  480  72 Hz
     640 X  480  75 Hz
     800 X  600  56 Hz
     800 X  600  60 Hz
     800 X  600  72 Hz
     800 X  600  75 Hz
     832 X  624  75 Hz
    1024 X  768  60 Hz
    1024 X  768  70 Hz
    1024 X  768  75 Hz
    1152 X  864  75 Hz
    1280 X  960  60 Hz
    1280 X 1024  60 Hz
    1280 X 1024  75 Hz
*****************************************************************
Mitglied: 129813
129813 Sep 14, 2016 at 09:50:56 (UTC)
Goto Top
This is no CSV, where are the columns and headers ??
Member: colinardo
colinardo Sep 14, 2016 updated at 10:16:11 (UTC)
Goto Top
Hallo Franz,
eine CSV sieht anders aus da stimme ich @129813 zu face-smile

Aber wenn es nur ein Textfile ist lassen sich die Abschnitte mit "Active: No" folgendermaßen löschen:
$file = 'C:\daten.csv'   
(gc $file | out-string) -replace '(?ism)\*+\s*^Active\s*:\s?No.*?^\*+','' | set-content $file  
Ein Link auf eine Seite wo dies beschrieben ist, vielleicht mit anderen (guten) Tipps ist ebenfalls willkommen.
Regular Expressions Tutorial
Hier noch die ausführliche Beschreibung des Regex-Strings
(?ism)
Options: Case insensitive; Dot matches line breaks; ^$ match at line breaks;

Match the character “*” literally «\*+»
   Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Match a single character that is a “whitespace character” «\s*»
   Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Assert position at the beginning of a line «^»
Match the character string “Active” literally «Active»
Match a single character that is a “whitespace character” «\s*»
   Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the character “:” literally «:»
Match a single character that is a “whitespace character” «\s?»
   Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
Match the character string “No” literally «No»
Match any single character «.*?»
   Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
Assert position at the beginning of a line «^»
Match the character “*” literally «\*+»
   Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Grüße Uwe
Member: Franz-Josef-II
Franz-Josef-II Sep 14, 2016 at 10:00:14 (UTC)
Goto Top
In Deutsch face-wink

Das ist die Datei, die mit dem Befehl:
DumpEDID.exe > monitor.csv
erzeugt wird. Diese Datei kann z.B. in Excel mit dem Trennzeichen " : " tadellos importiert und weiterverarbeitet werden. Ob dies jetzt eine "echte" csv ist -> weiß nicht, Excel nimmts.

Das, was ich halt will, ist, wenn die powershell auf den Eintrag in Zeile 5 (Active : No) kommt, daß dann eben ab (= inklusive) dieser Zeile bis zum nächsten Sterndl gelöscht wird.
Member: Franz-Josef-II
Franz-Josef-II Sep 15, 2016 at 05:27:15 (UTC)
Goto Top
Reguläre Ausdrücke face-sad Ich habs eh befürchtet face-wink Ich denke, dies wird ein Winterprojekt für lange, dunkle, kalte Nächte face-wink


Herzlichen Dank

Zitat von @colinardo:
Aber wenn es nur ein Textfile ist lassen sich die Abschnitte mit "Active: No" folgendermaßen löschen:


Lt Beschreibung sollte DumpEDID das Kommandozeilentool zu MonitorInfoView sein. Beides von Nirsoft (von MS aufgekauft). Wenn ich dieses Programm
monitorinfoview.exe /scomma test.csv
laufen lasse, dann schaut die Datei so aus:

DELL 1708FP,No,FP1817BBBBQ9,46 / 2007,44048 (0xAC10),16419 (0x4023),1280 X 1024,,34 X 27 cm (17.1 Inch),30 - 81 KHz,56 - 76 Hz,No,Yes,Yes,Yes,No,2.20,1111642425 (0x42425139),1.3,DEL4023\4&4d7f119&0&UID16843008,,01.09.2016 07:39:02
JC198D,Yes,628GM30JA0143,28 / 2006,25634 (0x6422),1478 (0x05C6),1280 X 1024,,38 X 30 cm (19.1 Inch),30 - 83 KHz,50 - 76 Hz,No,No,No,Yes,No,2.20,143 (0x0000008F),1.3,HSD05C6\4&4d7f119&0&UID16843008,,01.09.2016 07:39:02

Da fehlen (mir persönlich) die Überschriften. Technische Frage: Ist das jetzt eine "echte" csv?

Die Programme sind von da:
DumpEDID
MonitorInfoView
Member: colinardo
colinardo Sep 15, 2016 updated at 05:48:44 (UTC)
Goto Top
Da fehlen (mir persönlich) die Überschriften. Technische Frage: Ist das jetzt eine "echte" csv?
Überschriften der Spalten sind nicht zwingend erforderlich. Da hier aber die Felder mit einem Trenner (Komma) versehen sind ist es schon eher eine saubere CSV. CSV heißt ja ursprünglich "comma separated values", obwohl als Trennzeichen heutzutage auch Semikolon, Tab oder andere Zeichen zum Einsatz kommen können.
Die Frage ist immer wie interpretiert das Programm die Daten, und da ist man immer auf der sicheren Seite wenn man sich an bestimmte Standards hält. Z.B. macht Excel wenn das OS auf Deutsch eingestellt ist, die automatische Umwandlung der Spalten beim direkten Öffnen nur, wenn ein Semikolon als Trenner benutzt wird, ansonsten muss man zusätzlich nochmal den Text zu Spalten Assistenten drüber laufen lassen und das Trennzeichen definieren.

p.s. Regex ist nicht schwer wenn es einmal Klick gemacht hat. 3-4 Studen intensiv damit beschäftigen und du kommst sehr weit damit. Das wissen hilft dir über Grenzen hinweg in jeder Programmiersprache und ist essentielles Grundwissen das ich dir nur unbedingt empfehlen kann. Ich nutze es täglich bei meiner Arbeit. Ohne Regex würden wir heute noch mit Split/Substr/ und Konsorten ellenlange Konstrukte bauen die kaum einer mehr nachvollziehen kann, und manche Dinge sind nur mit Regex erst überhaupt machbar.