- Modifique o arquivo de forma que ele tenha as seguintes propriedades:
- Coluna A: cabeçalho é "nome". Todas as células contêm os nomes das pessoas para os bilhetes emitidos.
- Coluna B: Cabeçalho é "Número". Todas as células contêm o número de tickets a serem atribuídos à pessoa listada na mesma linha da coluna A. Nenhum outro texto está incluído.
- Nenhum outro dado é incluído na planilha com as informações "Nome" e "Número".
- Com a planilha contendo as informações "Nome" e "Número" selecionadas, salve o arquivo como CSV (delimitado por vírgulas). Para o propósito deste exemplo, usaremos OrigCSV.csv para o nome do arquivo.
- Abra uma sessão do PowerShell e navegue até a pasta que contém o CSV que você acabou de salvar.
- Execute o seguinte comando:
-
$x=ipcsv .\OrigCSV.csv;$x|%{for($y=1;$y-le$_.Number;$y++){$_.Name}}|Out-File NewCSV.csv
-
- Abra o NewCSV.csv e verifique se os nomes estão listados na maneira e no número desejados.
Se você precisar de mais do que apenas o nome duplicado, ainda é possível com o PowerShell - um pouco mais "interessante".
Aqui está uma versão expandida e comentada da linha de comando fornecida acima:
<#
First set $x so that it contains everything in OrigCSV.csv.
Each line of the CSV will be an array element within $x, with "Name" and "Number" properties according to their entry in the CSV.
ipcsv is a built-in alias for Import-Csv
#>
$x=ipcsv .\OrigCSV.csv;
<#
Next step is to put all the objects in $x through a ForEach-Object loop.
% is a built-in alias for ForEach-Object.
#>
$x|%{
<#
Within ForEach-Object, we're starting a For loop.
The loop definition starts with setting a counter, $y, to 1.
Then, if $y is less than or equal to the current line item's "Number" property, the script block will execute.
After the script block executes, it will increment $y by 1 and check the loop condition again.
Once $y becomes greater than the current line item's "Number" property, the For loop will exit.
#>
for($y=1;$y-le$_.Number;$y++)
{
# This next line simply outputs the "Name" property of the current line item.
$_.Name
# After the For loop exits, the script will return to the ForEach-Object loop and proceed to put the next item into the For loop.
}
# After ForEach-Object is done with its work, we pipe all of the output to Out-File so that the list gets written to a new CSV file.
}|Out-File NewCSV.csv