Change just one value in csv file

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

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #53216
    Profile photo of Tony Antony
    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 Profile photo of Tony Antony Tony Antony.
    • This topic was modified 3 weeks, 2 days ago by Profile photo of Tony Antony Tony Antony.
    #53232
    Profile photo of Daniel Krebs
    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
    Profile photo of random commandline
    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
    Profile photo of Tony Antony
    Tony Antony
    Participant

    @daniel Krebs, you're a genius, thank you very much

    #53272
    Profile photo of Tony Antony
    Tony Antony
    Participant

    $random commandline, thank you

    #53767
    Profile photo of Tony Antony
    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.