Replacing last characters after last comma with a string

前端 未结 4 964
庸人自扰
庸人自扰 2021-01-27 23:24

I have a huge text file which look like this:

36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,3
36,53,90478,0.58699759849,0.33616,4.8344975984         


        
4条回答
  •  无人及你
    2021-01-27 23:47

    Here is a cmd batch file that relies on a nice hack to split off the last item of a comma-separated list, independent on how many commas occur in the string. The basic technique is shown in the following; note that this requires delayed expansion to be enabled:

    set "x=This,is,the,original,list."
    set "y=" & set "z=%x:,=" & set "y=!y!,!z!" & set "z=%" & set "y=!y:~1!"
    echo ORIGINAL:  %x%
    echo LAST ITEM: %z%
    echo REMAINDER: %y%
    

    So here is the code of the script, holding the above method in a sub-routine called :GET_LAST_ITEM:

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    
    rem // Define constants here:
    set "_FILE=%~1" & rem // (specify the CSV file by the first argument)
    
    for /F "usebackq delims=" %%L in ("%_FILE%") do (
        call :GET_LAST_ITEM LAST REST "%%L"
        setlocal EnableDelayedExpansion
        set "LAST=0!LAST!"
        echo(!REST!,MI-!LAST:~-2!
        endlocal
    )
    
    endlocal
    exit /B
    
    
    :GET_LAST_ITEM  rtn_last  rtn_without_last  val_string
    ::This function splits off the last comma-separated item of a string.
    ::Note that exclamation marks must not occur within the given string.
    ::PARAMETERS:
    ::  rtn_last            variable to receive the last item
    ::  rtn_without_last    variable to receive the remaining string
    ::  val_string          original string
    setlocal EnableDelayedExpansion
    set "STR=,%~3"
    set "PRE=" & set "END=%STR:,=" & set "PRE=!PRE!,!END!" & set "END=%"
    endlocal & set "%~1=%END%" & set "%~2=%PRE:~2%"
    exit /B
    

提交回复
热议问题