Powershell находит и заменяет значение ячейки в csv

#powershell #csv

Вопрос:

Я пытаюсь проанализировать столбец с именем цена в файле csv.

столбец цен csv

в этом столбце мне нужно найти значения, в которых есть» -«. В приведенном выше примере вы можете видеть, что есть два случая (132-24, 5 и 158-25). Затем мне нужно заменить это значение в файле csv, используя формулу:

(номер на левой стороне тире номер на правой стороне тире/32)

таким образом, 132-24,5 будет 132 24.5/32 = 132,765625

Я уже написал и использовал код в течение года в matlab, но мне нужно преобразовать его в PowerShell, и я так запутался в том, как работает powershell. Пожалуйста, веди меня.

Код Matlab ниже:

 [~,~,data] = xlsread(['C:UsersMe' filelist(3,:)]);

for x = 2:length(data(:,4))
bondfind = strfind(num2str(cell2mat(data(x,4))),'-');
 if ~isempty(bondfind)
    priceString = num2str(cell2mat(data(x,4)));
    price = str2num(priceString(1:bondfind-1))   str2num(priceString(bondfind 1:end))/32;
    data(x,4) = num2cell(price);
 end
end

xlswrite(['C:UsersMe' filelist(3,:)],data);
 

Комментарии:

1. В какой момент вы заблудились? Как разделить отдельную строку на 2 части? Как заставить PowerShell обрабатывать строки как числа? Как записать измененные данные в csv-файл из PowerShell? Вы явно не совсем заблудились 🙂

2. Каковы заголовки CSV-файла? Всегда ли будет только один - на ячейку?

3. @MathiasR.Jessen, Ты слишком высоко ставишь меня. Я был полностью потерян в том, как анализировать каждый элемент, и не знал о функции сопоставления

Ответ №1:

Итак, если ваш файл выглядит примерно так:

 Article,Price
Something,132-24.5
Stuff,1371.8
More Stuff,587.3
Another thing, 158-25
 

Вы можете сделать это, чтобы выполнить преобразования значений в столбце Price :

 $data = Import-Csv -Path 'D:TestTheFile.csv'
foreach ($item in $data) {
    if ($item.Price -match '-') {
        $left, $right = [double[]]($item.Price -split '-')
        $item.Price = $left   $right / 32
    }
}

# output on screen
$data

# save as (new) CSV file
$data | Export-Csv -Path 'D:TestTheNewFile.csv' -NoTypeInformation
 

Вывод на экран:

 Article            Price
-------            -----
Something     132.765625
Stuff             1371.8
More Stuff         587.3
Another thing  158.78125
 

Комментарии:

1. Огромное спасибо. Я не мог понять, как просмотреть каждый предмет и использовать совпадение