yannosch
Goto Top

VBA Powershell CSV bestimmte Begriffe aus einer Spalte in neue Spalte der selben Zeile bringen

Hallo zusammen

IST-Zustand der zu bearbeitenden CSV:
Artikel;Kurzbez.;MOQ;
234087;bla bla **2000pcs**/bag;;
234987; bla bla bla **20000pcs**/rail;;
987543; bla **4000pcs**/bag;;

usw....

Nun möchte ich das die Zahl die VOR "pcs" steht in die Spalte "MOQ" der selben Zeile gebracht wird.
Quasie so:

Artikel;Kurzbez.;MOQ;
234087;bla bla **2000pcs**/bag;**2000**;
234987; bla bla bla **20000pcs**/rail;**20000**;
987543; bla **4000pcs**/bag;**4000**;

Hat jemand eine Idee wie ich sowas realisieren kann?

Ich dachte an VBA oder Powershell...
Bin für jede Hilfe dankbar! face-smile

Content-ID: 316337

Url: https://administrator.de/forum/vba-powershell-csv-bestimmte-begriffe-aus-einer-spalte-in-neue-spalte-der-selben-zeile-bringen-316337.html

Ausgedruckt am: 07.04.2025 um 10:04 Uhr

H41mSh1C0R
H41mSh1C0R 27.09.2016 aktualisiert um 15:45:44 Uhr
Goto Top
Hi,

hast du denn schon einen Ansatz?

Ein Ansatz:

Suche den String pro Zeile der * *.....pcs* * enhält, entferne die ersten 2 und die letzten 5 Zeichen. Das was übrig bleibt ist deine Zahl.
Dann suchst du ";;" da ja scheinbar die letzte Spalte leer ist und ersetzt ";;" mit ";"+Zahl+";".

Gruß
colinardo
Lösung colinardo 27.09.2016, aktualisiert am 28.09.2016 um 09:43:55 Uhr
Goto Top
Wenns weiter nichts ist face-smile
$csv = Import-CSV 'c:\daten.csv' -Delimiter ';'  
$csv | %{
   $_.MOQ = [regex]::match($_.'Kurzbez.','(?i)(\d+)pcs').Groups[1].Value  
}
$csv | export-CSV 'c:\Daten_neu.csv' -Delimiter ';' -NoType -Encoding UTF8  
Leute lernt "Regular Expressions"

Viele Grüße Uwe
Yannosch
Yannosch 27.09.2016 um 15:47:51 Uhr
Goto Top
stimmt, danke für den Hinweis ...

habe grad nur gesehen, dass immer "Zahl+pcs" gleich ist die ** sind nur manchmal da ..
Dann wird es wieder schwierig .. weil ich keinen Anfangspunkt habe .. -.-
H41mSh1C0R
H41mSh1C0R 27.09.2016 aktualisiert um 15:51:33 Uhr
Goto Top
Wenn ab und an * * dabei sein und mal nicht hast du 2 Checks. Einmal mit ;<Zahl>pcs; und einmal * *<Zahl>pcs* *.

Oder seh ich das falsch?
Yannosch
Yannosch 27.09.2016 um 15:58:21 Uhr
Goto Top
Zitat von @colinardo:

Wenns weiter nichts ist face-smile
> $csv = Import-CSV 'c:\daten.csv' -Delimiter ';'  
> $csv | %{
>  $_.MOQ = $_.'Kurzbez.' -Replace '.*?(\d+)pcs.*','$1'  
> }
> $csv | export-CSV 'c:\Daten_neu.csv' -Delimiter ';' -NoType -Encoding UTF8  
> 
Leute lernt "Regular Expressions"

Viele Grüße Uwe

Hey Uwe,

wenn kein "pcs" gefunden wird wird die komplette Spalte nach "MOQ" kopiert.

UND:
wenn es "540pcs." sind wird nur die "0" kopiert.
bei "69" nur die "9" usw.

Schonmal Danke für deine super Hilfe!
Yannosch
colinardo
Lösung colinardo 27.09.2016 um 15:59:57 Uhr
Goto Top
Ich hatte es oben abgeändert
Yannosch
Yannosch 27.09.2016 um 16:01:15 Uhr
Goto Top
Zitat von @H41mSh1C0R:

Wenn ab und an * * dabei sein und mal nicht hast du 2 Checks. Einmal mit ;<Zahl>pcs; und einmal * *<Zahl>pcs* *.

Oder seh ich das falsch?


Ich sehe die Schwierigkeit darin:

du suchst nach "pcs" und willst X-Stellen davor [X deshalb, weil du nicht weißt ob es 2,3,oder 4 Stellen davor sind] in als string in die spalte MOQ der selben Zeile kopieren.

wie schaffe ich es festzulegen, dass nur die Zahlenwerte vor pcs genommen werden?

liebe Grüße
Yannosch
colinardo
Lösung colinardo 27.09.2016 aktualisiert um 16:05:19 Uhr
Goto Top
Sorry bin gerade am Smartphone da ist das alles etwas Zeitverzögert. Update siehe oben.
Yannosch
Yannosch 27.09.2016 um 16:05:59 Uhr
Goto Top
Zitat von @colinardo:

Ich hatte es oben abgeändert

Die Daten werden nun zwar richtig erkannt, allerdings nicht in die Zeile MOQ geschrieben.
Bleiben einfach im Script stehen. face-confused
colinardo
colinardo 27.09.2016 aktualisiert um 16:15:43 Uhr
Goto Top
Zeitverzögerung ... nochmal kopieren bitte face-smile
Die verdammischte Korrekturfunktion ;-( am Smartphone hat derbe zugeschlagen...
Yannosch
Yannosch 28.09.2016 um 08:17:29 Uhr
Goto Top
Gar kein Problem!
Wieder mal eine PERFEKTE Problemlösung von dir.

Könnte die Ergebnisse einfach aus der Shell kopieren und in die neue Datei einfügen - ging ohne Probleme face-big-smile

Danke dir!
Gruß Yannosch
colinardo
Lösung colinardo 28.09.2016 aktualisiert um 08:21:22 Uhr
Goto Top
Keine Ursache face-smile

p.s. Ich habe inzwischen dem gestern sehr hartnäckigen Smartphone das Vorlaute ändern meines Geschreibsels abgewöhnt, das war ja eine Katastrophe face-wink. Wenn man viel Code schreibt sind die Dinger nicht zu gebrauchen.