Я хочу читать данные из csv или других файлов txt. Данные должны быть прочитаны только из строки 1 и нескольких столбцов в строке 1 и сохранены в переменных, а после сохранения удалить строку. Теперь я сделал это так:
Get-ChildItem -Path C:\path | ForEach-Object -Process {
$YourContent = Get-Content -Path $_.FullName
$YourVariable = $YourContent | Select-Object -First 1
$YourContent | Select-Object -Skip 1 | Set-Content -Path $_.FullName
Моя проблема в том, что моя переменная распечатывается так:
Elvis;867.5390;[email protected]
Поэтому я хотел бы сохранить каждую переменную в отдельном столбце. Пример того, что может выглядеть csv:
Elvis | 867.5309 | [email protected] Sammy | 555.1234 | [email protected]
Что ты делаешь с $YourVariable? Вы упоминаете CSV, ваша переменная уже очень близка к единице ... просто замените ; на ,, как этот $YourVariable = ($YourContent | Select-Object -First 1) -replace (';',',')





Используйте Import-Csv вместо Get-Content:
Import-Csv file.csv -Delimiter ";" -Header A, B, C
Как это решить req. читать первую строку, обрабатывать и сохранять без нее? Вам понадобится |ConvertTo-Csv|Select-Object -Skip 2|Set-Content ..., и исходный формат будет перезаписан версиями с двойным кавычком.
вот один из способов сделать то, что я думаю, вы хотите.
Код:
$FileName = "$env:TEMP\Pimeydentimo.txt"
# create a file to work with
@'
Alfa;123.456;Some unwanted info;[email protected]
Bravo;234.567;More info that can be dropped;[email protected]
Charlie;345.678;This is also ignoreable;[email protected]
'@ | Set-Content -LiteralPath $FileName
$InStuff = Get-Content -LiteralPath $FileName
$TempObject = $InStuff[0] |
ConvertFrom-Csv -Delimiter ';' -Header 'Name', 'Number', 'DropThisOne', 'Email' |
Select-Object -Property * -ExcludeProperty DropThisOne
$InStuff[1..$InStuff.GetUpperBound(0)] |
Set-Content -LiteralPath $FileName
$InStuff
'=' * 30
$TempObject
'=' * 30
Get-Content -LiteralPath $FileName
выход ...
Alfa;123.456;Some unwanted info;[email protected]
Bravo;234.567;More info that can be dropped;[email protected]
Charlie;345.678;This is also ignoreable;[email protected]
==============================
Name Number Email
---- ------ -----
Alfa 123.456 [email protected]
==============================
Bravo;234.567;More info that can be dropped;[email protected]
Charlie;345.678;This is also ignoreable;[email protected]
Спасибо за ответы!
Я пытаюсь немного пояснить, что я пытался сделать. Ответы могут уже сделать это, но я еще не настолько хорош в Powershell и еще много учусь.
Если у меня есть csv или любой другой файл txt, я бы хотел прочитать первую строку файла. Строка содержит более одного фрагмента информации. Я также хочу сохранить каждую часть информации в переменных. После сохранения информации в переменных я хочу удалить строку.
Пример:
Модель автомобиля Год
Форд Фиеста 2015
Audi A6 2018 года
В этом примере я хотел бы сохранить Ford, Fiesta и 2015 в переменных (строка 1) ($ Card, $ Model, $ Year) и после этого удалить строку. Вторую строку удалять не следует, так как она будет использована в дальнейшем.
поэтому вы хотите - [1] прочитать в 1-й строке каждого файла - [2] преобразовать эту строку в объект, используя только НЕКОТОРЫЕ свойства /////, это правильно? если это так, попробуйте использовать
Get-Contnet -TotalCount 1для получения 1-й строки, а затем используйтеConvertFrom-CSVдля преобразования этой строки в объект.