В PowerShell необходимо удалить цитату [дубликат]

50% отступов не будут центрировать вашего ребенка, он поместит его ниже центра. Я думаю, вы действительно хотите, чтобы набивка составляла 25%. Может быть, у вас просто не хватает места, поскольку ваш контент становится выше?

EDIT: Nevermind, сайт w3schools говорит, что

% Задает заполнение в процентах от ширины содержащий элемент

. Может быть, он всегда использует ширину? Я никогда не замечал.

То, что вы делаете, может быть достигнуто с помощью display: table (хотя бы для современных браузеров). Здесь объясняется методика .

8
задан JPBlanc 6 June 2014 в 05:39
поделиться

7 ответов

Вот способ удаления кавычек

get-process | convertto-csv -NoTypeInformation -Delimiter "," | % {$_ -replace '"',''} 

Но у него есть серьезный недостаток, если один из элементов содержит ", он будет удален!

11
ответ дан JPBlanc 27 August 2018 в 07:58
поделиться

Это очень похоже на принятый ответ, но это помогает предотвратить нежелательное удаление «реальных» котировок.

$delimiter = ','
Get-Process | ConvertTo-Csv -Delimiter $delimiter -NoTypeInformation | foreach { $_ -replace '^"','' -replace "`"$delimiter`"",$delimiter -replace '"$','' }

Это сделает следующее:

  • Удалить кавычки, которые начинаются с строки
  • Удалить кавычки, которые заканчивают строку
  • Заменить кавычки, которые ограничивают ограничитель только разделителем.

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

2
ответ дан bwerks 27 August 2018 в 07:58
поделиться

Сегодня я работал над таблицей и думал об этом самом вопросе, когда я просматривал файл CSV в блокноте и решил посмотреть, что другие придумали. Кажется, многие из них слишком усложнили решение. Вот простой способ удалить кавычки из файла CSV, сгенерированного командлетом Export-Csv в PowerShell.

Создайте файл TEST.csv со следующими данными.

" ID »,« Имя »,« Штат »« 5 »,« Стефани »,« Аризона »,« 4 »,« Мелани »,« Орегон »,« Кэти »,« Техас »,« 8 », , «Idaho» «9», «Dolly», «Tennessee»

Сохранить как: TEST.csv

Хранить содержимое файла в переменной $ Test $ Test = Get-Content. \ TEST.csv

Загрузить переменную $ Test, чтобы увидеть результаты командлета get-content $ Test

Загрузите переменную Test снова и замените все («,») запятой, затем завершите начало и конец, удалив каждую метку кавычки $ Test.Replace ('","', ","). TrimStart ('"'). TrimEnd ('"')

Сохранить / заменить ТЕСТ .csv file $ Test.Replace ('","', ","). TrimStart ('"'). TrimEnd ('' ') | Out-File. \ TEST.csv -Force -Confirm: $ false

Тестирование нового файла. Вывод с помощью Import-Csv и Get-Content: Import-Csv. \ TEST.csv Get-Content. \ TEST. csv

Чтобы суммировать все, работа может быть выполнена с помощью двух строк кода $ Test = Get-Content. \ TEST.csv $ Test.Replace ('","', ",") .TrimStart ('' '). TrimEnd (' '') | Out-File. \ TEST.csv -Force -Confirm: $ false

3
ответ дан Fred 27 August 2018 в 07:58
поделиться

Я столкнулся с этой проблемой, нашел этот вопрос, но не был удовлетворен ответами, потому что все они страдают, если данные, которые вы используете, содержат разделитель, который должен оставаться указанным.

Решение, приведенное ниже, похоже, решает эту проблему для общего случая и для всех вариантов, которые могут вызвать проблемы.

Я нашел этот ответ в другом месте, Удаление цитат из CSV, созданных PowerShell , и использовали его для кодирования примерного ответа для сообщества SO.

Attribution: Кредит для регулярного выражения , переходит на 100% в Russ Loski.

Код в функции, Remove-DoubleQuotesFromCsv

function Remove-DoubleQuotesFromCsv
{
    param (
        [Parameter(Mandatory=$true)]
        [string]
        $InputFile,

        [string]
        $OutputFile
    )

    if (-not $OutputFile)
    {
        $OutputFile = $InputFile
    }

    $inputCsv = Import-Csv $InputFile

    $quotedData = $inputCsv | ConvertTo-Csv -NoTypeInformation

    $outputCsv = $quotedData | % {$_ -replace  `
        '\G(?<start>^|,)(("(?<output>[^,"]*?)"(?=,|$))|(?<output>".*?(?<!")("")*?"(?=,|$)))' `
        ,'${start}${output}'}

    $outputCsv | Out-File $OutputFile -Encoding utf8 -Force
}

Тестовый код

$csvData = @"
id,string,notes,number
1,hello world.,classic,123
2,"a comma, is in here","test data 1",345
3,",a comma, is in here","test data 2",346
4,"a comma, is in here,","test data 3",347
"@

$data = $csvData | ConvertFrom-Csv
"`r`n---- data ---"
$data

$quotedData = $data | ConvertTo-Csv -NoTypeInformation
"`r`n---- quotedData ---"
$quotedData

# this regular expression comes from:
# http://www.sqlmovers.com/removing-quotes-from-csv-created-by-powershell/
$fixedData = $quotedData | % {$_ -replace  `
  '\G(?<start>^|,)(("(?<output>[^,"]*?)"(?=,|$))|(?<output>".*?(?<!")("")*?"(?=,|$)))' `
  ,'${start}${output}'}
"`r`n---- fixedData ---"
$fixedData

$fixedData | Out-File e:\test.csv -Encoding ascii -Force
"`r`n---- e:\test.csv ---"
Get-Content e:\test.csv

Тест Выход

---- data ---
id string               notes       number
-- ------               -----       ------
1  hello world.         classic     123   
2  a comma, is in here  test data 1 345   
3  ,a comma, is in here test data 2 346   
4  a comma, is in here, test data 3 347   

---- quotedData ---
"id","string","notes","number"
"1","hello world.","classic","123"
"2","a comma, is in here","test data 1","345"
"3",",a comma, is in here","test data 2","346"
"4","a comma, is in here,","test data 3","347"

---- fixedData ---
id,string,notes,number
1,hello world.,classic,123
2,"a comma, is in here",test data 1,345
3,",a comma, is in here",test data 2,346
4,"a comma, is in here,",test data 3,347

---- e:\test.csv ---
id,string,notes,number
1,hello world.,classic,123
2,"a comma, is in here",test data 1,345
3,",a comma, is in here",test data 2,346
4,"a comma, is in here,",test data 3,347
2
ответ дан Kory Gill 27 August 2018 в 07:58
поделиться

Я обнаружил, что ответ Кори не работает для случая, когда исходная строка включала более одного пустого поля в строке. То есть «ABC», «0» было хорошо, но «ABC», «0» не обрабатывалось должным образом. Он прекратил заменять кавычки после «,,,». Я исправил его, добавив «|(?<output>)» ближе к концу первого параметра, например:

% {$_ -replace  `
    '\G(?<start>^|,)(("(?<output>[^,"]*?)"(?=,|$))|(?<output>".*?(?<!")("")*?"(?=,|$))|(?<output>))', `
    '${start}${output}'}
0
ответ дан kproth 27 August 2018 в 07:58
поделиться

В зависимости от того, насколько ваши данные CSV являются патологическими (или «полнофункциональными»), одно из опубликованных решений уже будет работать.

Решение, опубликованное Kory Gill, почти идеально - единственный вопрос, оставшийся что кавычки удаляются также для ячеек, содержащих разделитель строк \r\n, что вызывает проблемы во многих инструментах.

Решение добавляет новую строку к выражению класса символов:

$fixedData = $quotedData | % {$_ -replace  `
'\G(?<start>^|,)(("(?<output>[^,"\n]*?)"(?=,|$))|(?<output>".*?(?<!")("")*?"(?=,|$)))' `
,'${start}${output}'}
0
ответ дан LCC 27 August 2018 в 07:58
поделиться

Я не потратил много времени на удаление цитат. Но это обходное решение.

get-process | Export-Csv -NoTypeInformation -Verbose -Path $env:temp\test.csv
$csv = Import-Csv -Path $env:temp\test.csv

Это быстрый способ обхода пути, и может быть лучший способ сделать это.

0
ответ дан ravikanth 27 August 2018 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: