返回列表 发帖
回复 1# 438050057

*.h 文件中包含多种有 * 字符的文本行包括注释段落,如下
  1. ...
  2. #define _TR_DynaRWP_Name "*RIGIDWALL_PLANAR"
  3. #define __TRY__ void __try__(void**), *_sehrec[6]; __try__(_sehrec);
  4. typedef struct localeinfo_struct _locale_tstruct,*_locale_t;
  5. _CRTIMP char *_cgets(char *_Buffer);
  6. /* ... */
复制代码
楼主需要提取哪种特定格式的字段须予明确...

TOP

本帖最后由 aloha20200628 于 2025-1-15 20:57 编辑

回复 3# 438050057

以下代码捕获当前目录下 *.h 文件(假定是 ansi 或 gb2312 编码)中所有形如 #define ...."xxx" 格式的文本行,提取其中的 xxx 字段并输出到 all.txt 文件...
  1. @echo off &(for /f "delims=" %%F in ('dir /b/a-d *.h') do for /f tokens^=2^delims^=^" %%v in (
  2.   'findstr /irc:"#define .*\".*\"" "%%F" ') do (
  3.   set "v=%%v" &setlocal enabledelayedexpansion &if "!v:~,1!"=="*" echo,%%v&endlocal))>all.txt
  4. type "all.txt"&pause&exit/b
复制代码

TOP

回复 6# 438050057

以下版本可在批处中直接过滤重复字符串,但不区分大小写
  1. @echo off &(for /f "delims=" %%F in ('dir /b/a-d *.h') do for /f tokens^=2^delims^=^" %%v in (
  2.   'findstr /irc:"#define .*\".*\"" "%%F" ') do if not defined _#%%v (
  3.   set "_#%%v=1" &set "v=%%v" &setlocal enabledelayedexpansion &if "!v:~,1!"=="*" echo,%%v&endlocal))>all.txt
  4. type "all.txt"&pause&exit/b
复制代码
如须区分大小写,可用以下版本,但须从本坛第三方下载 gawk.exe v4.1.3版本,落地即用,与批处脚本和 *.h 文件同目录(http://bcn.bathome.net/s/tool/index.html?key=gawk
  1. @echo off &(for /f "delims=" %%F in ('dir /b/a-d *.h') do for /f tokens^=2^delims^=^" %%v in (
  2.   'findstr /irc:"#define .*\".*\"" "%%F" ') do (
  3.   set "v=%%v" &setlocal enabledelayedexpansion &if "!v:~,1!"=="*" echo,%%v&endlocal))>0.0
  4. endlocal &gawk "!a[$0]++" "0.0">all.txt
  5. del /q "0.0" &type "all.txt" &pause &exit/b
复制代码

TOP

返回列表