Код Power Shell для удаления специальных символов в заголовках столбцов (файл .csv) - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь l oop через 40 CSV-файлов в пути и удалить все символы, которые не являются цифрами c, алфавитами и пробелами только в заголовках.

Ниже приведен мой код я пытался работать, это работает для заголовков в файлах, но также заменяет все данные в файле, и я могу видеть только заголовки без специальных символов в нем, я просто новичок в Power Shell, не знаю, как поступить в дальнейшем любая помощь высоко ценится.

$path = "C:\AllFiles\"

Get-ChildItem -path $path -Filter *.csv | 

Foreach-Object {

$content = Get-Content $_.FullName

$content[0] = $content[0] -replace '[^0-9a-zA-Z, ]'|Set-Content $_.FullName

}

Ответы [ 4 ]

2 голосов
/ 12 февраля 2020

Оператору -replace требуются два значения: первое значение - это то, что вы ищете, а второе - то, на что следует заменить первое значение.

ПРИМЕР: "John Jones" -replace "Jones","Smith"

Это заменит «Jones» текстом «Smith», создав новую строку «John Smith»

В вашем примере вместо создания регулярного выражения того, что вы хотите сохранить, создайте регулярное выражение того, что вы хотите заменить.

ПРИМЕР:

$path = "C:\AllFiles\"

Get-ChildItem -path $path -Filter *.csv | 
Foreach-Object {

$content = Get-Content -Path $path

$content[0] = $content[0] -replace '[regex for special chars]',""

Set-Content $path -value $content -force
}

Это заменит всю строку строкой, в которой вы заменили значения регулярного выражения на ""

1 голос
/ 12 февраля 2020

Попробуйте это:

dir "C:\AllFiles" -Filter *.csv | % {
  (Get-Content $_.FullName)[0] -replace '[\W]', '' | Set-Content $_.FullName -Force
}
1 голос
/ 12 февраля 2020

Это должно сработать и должно быть самым быстрым методом:

$path = 'C:\AllFiles\'

$collection = Get-ChildItem -path $path -Filter *.csv' 

foreach( $file in $collection ) {

    $content = [System.IO.File]::ReadAllLines( $file.FullName )

    $content[0] = $content[0] -replace '[^0-9a-zA-Z, ]'

    [System.IO.File]::WriteAllLines( $file.FullName, $content ) | Out-Null 
}
1 голос
/ 12 февраля 2020

Довольно близко, попробуйте вот так:

$path = "C:\temp"
Get-ChildItem -path $path -Filter *.csv | 
    Foreach-Object {
    $content = Get-Content $_
    $content[0] = $content[0] -replace '[^a-zA-Z0-9, ]',''
    $content | Out-File $_
}

Это удалит только специальные символы в первой строке, но оставит остальную часть файла без изменений.

...