#powershell #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. Огромное спасибо. Я не мог понять, как просмотреть каждый предмет и использовать совпадение