# Change just one value in csv file

This topic contains 5 replies, has 3 voices, and was last updated by  Tony Antony 2 weeks, 4 days ago.

Viewing 6 posts - 1 through 6 (of 6 total)
• Author
Posts
• #53216

Tony Antony
Participant

I'm trying to find a way to replace one value in a csv file. This is what my CSV looks like, as you can see, the 'Available' consists of Y and N

Branch Number, CoreID, Available, Workstation
8002, FMD354800200, Y,
8002, FMD354800201, Y,
8002, FMD354800202, N,
8002, FMD354800203, N,
8002, FMD354800204, Y,

[io.file]::ReadLines($CSV).replace($First.Available,”N”) | Out-File $CSV -Encoding ascii –Force The problem is $First.Available

is Y. But when I tell it to change just that one Y to a N, it replaces all Y's to N's.

How would I change just the first Y to a N instead of all Y's to N's?

• This topic was modified 3 weeks, 2 days ago by  Tony Antony.
• This topic was modified 3 weeks, 2 days ago by  Tony Antony.
#53232

Daniel Krebs
Participant

The Replace method of an instantiated the .NET Regex class has the option to specify a maximum number of replace operations.

Example:

$lines = Get-Content -Path$CSV -Raw

$pattern =$First.Available
$regEx = New-Object -TypeName 'System.Text.RegularExpressions.Regex' -ArgumentList$pattern
$result =$regEx.Replace($lines, 'N', 1)$result | Out-File -FilePath $CSV -Encoding ascii -Force  #53234 random commandline Participant $content = Import-Csv .\path\to\old.csv
If ($content[0].Available -eq 'Y'){$content[0].Available = 'N'}
$content | Export-Csv -Path .\path\to\new.csv -NoTypeInformation  #53236 Tony Antony Participant @daniel Krebs, you're a genius, thank you very much #53272 Tony Antony Participant$random commandline, thank you

#53767

Tony Antony
Participant

I had everything working, but I did something this morning, and now it's not working again. I'm not sure what I did.

This is the problem:

I typed in 2000, and it grabbed the correct Core ID (FMD354200000), but as you can see below, it added my computer name to a 1000 core ID.

Branch Number,CoreID,Available
1000,FMD354100000,2UA51427CH
1000,FMD354100001,Yes
1000,FMD354100002,Yes
1000,FMD354100003,Yes
1000,FMD354100004,Yes
2000,FMD354200000,Yes
2000,FMD354200001,Yes
2000,FMD354200002,Yes
2000,FMD354200003,Yes

$Workstation =$env:COMPUTERNAME
$CoreIP = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\CORe\IP"$CSV = '\\hqfs1\users\tantony\PowerShell\GetCoreID\CoreID.csv'
$ImportCSV = Import-Csv$CSV
$GetBranchNum = Read-Host "Enter branch number and press ENTER: " if($ImportCSV | Where-Object {$_."Branch Number" -eq$GetBranchNum})
{
Write-Host -NoNewline "Branch number found in CSV file!t" -ForegroundColor Green

if($ImportCSV | Where-Object {$_."Available" -eq "Yes".Trim() -eq "Y" -and $_."Branch Number".Trim() -eq$GetBranchNum})
{

Write-Host "$HowManyLeft Available Core ID found!" -ForegroundColor Green$First = $ImportCSV | Where-Object {$_.'Branch Number'.Trim() -eq $GetBranchNum -and$_.Available.Trim() -eq "Yes"} | Select-Object -First 1

$AddCoreID =$First.CoreID

New-ItemProperty -path $CoreIP -name "TTable ID" -PropertyType String -Value$AddCoreID -Force | Select-Object "TTable ID" | Format-List

$lines = Get-Content -Path$CSV -Raw

$pattern =$First.Available

$regEx = New-Object -TypeName 'System.Text.RegularExpressions.Regex' -ArgumentList$pattern

$result =$regEx.Replace($lines,$Workstation, 1)

$result | Out-File -FilePath$CSV -Encoding ascii -Force

}

else
{
Write-Host "No Available Core ID found!" -ForegroundColor Red
}
}

else
{
Write-Warning "Branch number not found in CSV file!"
}
`
Viewing 6 posts - 1 through 6 (of 6 total)

You must be logged in to reply to this topic.