[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 qixiaobin0715 于 2024-1-12 11:11 编辑

考虑不是太成熟,代码应当还能简化,只是提供一种思路:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1*" %%a in (a.csv) do (
  4.     setlocal enabledelayedexpansion
  5.     set FirstCol=%%a
  6.     for %%j in (%%b) do (
  7.         for /f "delims=0123456789." %%k in ("#%%j") do (
  8.             if not "%%k"=="#" (
  9.                 if !x! equ 3 (
  10.                     set /a y+=1
  11.                     set _!y!=!str!
  12.                 ) else if !x! equ 4 (
  13.                     if defined _!y! (
  14.                         for /l %%l in (1,1,!y!) do (
  15.                             if defined FourthCol (
  16.                                 echo,%%a !_%%l! !FourthCol!
  17.                             ) else (
  18.                                 echo,%%a !_%%l!
  19.                             )
  20.                             set _%%l=
  21.                         )
  22.                         set FourthCol=
  23.                         set y=0
  24.                     )
  25.                     echo,%%a !str!
  26.                 )
  27.                 set str=%%j
  28.                 set x=0
  29.             ) else (
  30.                 set str=!str! %%j
  31.                 set /a x+=1
  32.                 if !x! equ 4 set FourthCol=%%j
  33.             )
  34.         )
  35.     )
  36.     if defined _!y! (
  37.         for /l %%l in (1,1,!y!) do (
  38.             if defined FourthCol (
  39.                 echo,!FirstCol! !_%%l! !FourthCol!
  40.             ) else (
  41.                 echo,!FirstCol! !_%%l!
  42.             )
  43.         )
  44.     )
  45.     echo,!FirstCol! !str!
  46.     endlocal
  47. ))>out.csv
  48. pause
复制代码

TOP

本帖最后由 qixiaobin0715 于 2024-1-12 11:20 编辑

主要是练练手。
将楼上代码修改如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1*" %%a in (a.csv) do (
  4.     setlocal enabledelayedexpansion
  5.     for %%j in (%%b,x) do (
  6.         for /f "delims=0123456789." %%k in ("#%%j") do (
  7.             if not "%%k"=="#" (
  8.                 if !x! equ 3 (
  9.                     set /a y+=1
  10.                     set _!y!=!str!
  11.                 ) else if !x! equ 4 (
  12.                     if defined _!y! (
  13.                         for /l %%l in (1,1,!y!) do (
  14.                             if defined FourthCol (
  15.                                 echo,%%a !_%%l! !FourthCol!
  16.                             ) else (
  17.                                 echo,%%a !_%%l!
  18.                             )
  19.                             set _%%l=
  20.                         )
  21.                         set FourthCol=
  22.                         set y=0
  23.                     )
  24.                     echo,%%a !str!
  25.                 )
  26.                 set str=%%j
  27.                 set x=0
  28.             ) else (
  29.                 set str=!str! %%j
  30.                 set /a x+=1
  31.                 if !x! equ 4 set FourthCol=%%j
  32.             )
  33.         )
  34.     )
  35.     endlocal
  36. ))>out.csv
  37. pause
复制代码

TOP

本帖最后由 qixiaobin0715 于 2024-1-12 16:32 编辑

13、14楼提供代码好像不行,刚发现楼主提供的csv文件在599行中,英文名称含有空格,分割时会出现问题。以上代码作废。
使用不带参数的for循环,按水平制表符分割字符串时不能存在干扰字符,即要分割的字符串中不能存在空格、逗号、分号、等号等这类字符,这种情况应当也能解决,不过可能要在前面多几行代码处理一下字符串即可。

TOP

修改14楼的代码,以便解决15楼的问题:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1*" %%a in (a.csv) do (
  4.     setlocal enabledelayedexpansion
  5.     set Line="%%b"
  6.     set Line=!Line: =" "!
  7.     set Line=!Line:""=!
  8.     for %%j in (!line!,x) do (
  9.         for /f "delims=0123456789." %%k in ("#%%~j") do (
  10.             if not "%%k"=="#" (
  11.                 if !x! equ 3 (
  12.                     set /a y+=1
  13.                     set _!y!=!str!
  14.                 ) else if !x! equ 4 (
  15.                     if defined _!y! (
  16.                         for /l %%l in (1,1,!y!) do (
  17.                             if defined FourthCol (
  18.                                 echo,%%a !_%%l! !FourthCol!
  19.                             ) else (
  20.                                 echo,%%a !_%%l!
  21.                             )
  22.                             set _%%l=
  23.                         )
  24.                         set FourthCol=
  25.                         set y=0
  26.                     )
  27.                     echo,%%a !str!
  28.                 )
  29.                 set str=%%~j
  30.                 set x=0
  31.             ) else (
  32.                 set str=!str! %%~j
  33.                 set /a x+=1
  34.                 if !x! equ 4 set FourthCol=%%~j
  35.             )
  36.         )
  37.     )
  38.     endlocal
  39. ))>out.csv
  40. pause
复制代码
这种问题对于锻炼逻辑思维很有好处。顺便练习一下if及set命令的用法。

TOP

返回列表