Я пытаюсь просмотреть серию текстовых файлов, извлекающих информацию в массивы на основе разделителя :.
Все значения, которые я беру из текстовых файлов, помещаются в одну строку, кроме одного. (значение "текст объявления"). Это обрезает информацию после строки 1 в окончательном выводе. Когда я заранее удаляю каретки и разрывы строк, ни одно из полей не вводится правильно.
Как мне указать, что мой массив должен принимать многострочные входные данные для поля «текст объявления»?
Ниже приведен код, с которым я работаю:
$files = ls "*.txt"
$dictionary = @{}
[System.Collections.Generic.List[String]]$list = @()
foreach($f in $files){$in = Get-Content $f
$in.Split([Environment]::NewLine) | ForEach-Object { $key,$value = $_.Split(':')
$dictionary[$key] = $value
}
[void]$list.Add( $dictionary['Ad ID'] + ',' + $dictionary['Ad Text'] + ',' + $dictionary['Ad Landing Page'] + ',' + $dictionary['Ad Targeting Location'] + ',' + $dictionary['Age'] + ',' + $dictionary['Language'] + ',' + $dictionary['Placements'] + ',' + $dictionary['Interests'] + ',' + $dictionary['Behaviors'] + ',' + $dictionary['Ad Impressions'] + ',' + $dictionary['Ad Clicks'] + ',' + $dictionary['Ad Spend'] + ',' + $dictionary['Ad Creation Date'] + ','+ $dictionary['Friends'] + ',' + $dictionary['Ad End Date'] + ',' + $dictionary['Excluded Connections'] + ',' + $dictionary['Image'] + ',' + $dictionary['Ad Targeting Location']+','+$dictionary[‘File Name’] )
}
$list | Out-File -FilePath '.\trial.csv' -Append





Предполагая, что дополнительные строки, следующие за строками с префиксом Ad Text:, сами не содержат символов ::
# Create sample text file t.txt
@'
Ad ID:10
Ad Text:one
two
Ad Landing Page:http://example.org
'@ > t.txt
# Split the lines into field names and values by ":" and
# build a dictionary.
$dict = [ordered] @{}
$i = 0
(Get-Content -Raw t.txt) -split '(?m)^([^\n:]+):' -ne '' | ForEach-Object {
if ($i++ % 2 -eq 0) {
$key = $_
} else {
$dict[$key] = $_
}
}
# Output the dictionary, showing each entry as a list.
$dict | Format-List
Вывод выглядит следующим образом, показывая, что запись Ad Text состоит из двух строк:
Name : Ad ID
Value : 10
Name : Ad Landing Page
Value : http://example.org
Name : Ad Text
Value : one
two
Get-Content— без-Raw— возвращает массив строк, поэтому его элементы по определению не имеют встроенных новых строк.