Występują problemy przy próbie wyciągnięcia separatorów tysięcy z niektórych wartości walutowych w zbiorze plików. "Złe" wartości są rozdzielane przecinkami i podwójnymi cudzysłowami. Są tam inne wartości, które wynoszą < $ 1000, które nie stanowią problemu.Zastępuje separatory tysięcy w CSV z regex
Przykład istniejącego pliku:
"12,345.67",12.34,"123,456.78",1.00,"123,456,789.12"
Przykład pożądane plików (tysiące separatorów usunięte):
"12345.67",12.34,"123456.78",1.00,"123456789.12"
I znaleziono regex ekspresji dla dopasowania liczby w separator, który działa doskonale, ale mam problem z operatorem -replace. Wartość zastępcza mnie myli. Czytałem o $ & i zastanawiam się, czy powinienem użyć tego tutaj. Próbowałem $ _, ale to wyciąga WSZYSTKIE moje przecinki. Czy muszę jakoś używać zapałek $?
Oto mój kod:
$Files = Get-ChildItem *input.csv
foreach ($file in $Files)
{
$file |
Get-Content | #assume that I can't use -raw
% {$_ -replace '"[\d]{1,3}(,[\d]{3})*(\.[\d]+)?"', ("$&" -replace ',','')} | #this is my problem
out-file output.csv -append -encoding ascii
}
Użyj import-csv, a następnie możesz przechodzić między wierszami i elementami, usuwać przecinki z każdego elementu, budując nowe wiersze, a następnie zapisywać nowe wiersze w pliku zastępującym. –