Прочитать столбцы строки 1 CSV и сохранить их в переменных

Я хочу читать данные из 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]

поэтому вы хотите - [1] прочитать в 1-й строке каждого файла - [2] преобразовать эту строку в объект, используя только НЕКОТОРЫЕ свойства /////, это правильно? если это так, попробуйте использовать Get-Contnet -TotalCount 1 для получения 1-й строки, а затем используйте ConvertFrom-CSV для преобразования этой строки в объект.

Lee_Dailey 29.10.2018 14:49

Что ты делаешь с $YourVariable? Вы упоминаете CSV, ваша переменная уже очень близка к единице ... просто замените ; на ,, как этот $YourVariable = ($YourContent | Select-Object -First 1) -replace (';',',')

henrycarteruk 29.10.2018 16:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
141
3

Ответы 3

Используйте Import-Csv вместо Get-Content:

Import-Csv file.csv -Delimiter ";" -Header A, B, C

Как это решить req. читать первую строку, обрабатывать и сохранять без нее? Вам понадобится |ConvertTo-Csv|Select-Object -Skip 2|Set-Content ..., и исходный формат будет перезаписан версиями с двойным кавычком.

user6811411 29.10.2018 14:52

вот один из способов сделать то, что я думаю, вы хотите.

  1. первые 8 строк создают файл для работы. [ухмылка]
  2. строка 10 читает в этом файле
  3. строки 11-13 преобразовывают 1-ю строку в объект и удаляют нежелательное свойство
  4. строки 14-15 захватывают все, НО первую строку и отправляют ее для перезаписи исходного файла
  5. остальные строки показывают, что было сделано [ухмылка]

Код:

$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) и после этого удалить строку. Вторую строку удалять не следует, так как она будет использована в дальнейшем.

Другие вопросы по теме