标题: [文本处理] [已解决]字符串组合问题(望指正) [打印本页]
作者: 冰剑 时间: 2017-10-16 03:54 标题: [已解决]字符串组合问题(望指正)
本帖最后由 冰剑 于 2017-10-17 16:10 编辑
源文件内容示例:
第一行字符串
第二行字符串
第三行字符串
........
要生成的文件内容新建文本文件abcd.txt
.STRINGS
$str[1] = "第一行字符串"
$str[2] = "第二行字符串"
$str[3] = "第三行字符串"
......
.END- SET /P file=请将需要处理的文件拖入本窗口
- SET /P init=请输入生成数组起始值
- CLS
- set str=.STRINGS
- ECHO %str%>abcd.txt
- SET str1=^$str[
- SET /a str2=%init%
- SET str3=^] = "
- SET str4=^"
- for /f %%i in (%file%) do (
- SET "strall=%str1%%str2%%str3%!%%i!%str4%"
- ECHO !strall!>>abcd.txt
- SET /a str2=%str2%+1
- )
- SET str=.END
- ECHO %str%>>abcd.txt
- ECHO 数据处理完成
- PAUSE
复制代码
望各位大神指点一下哪里出了问题
读取的文件返回的数据都是空的
数组值一直都是输入的起始值
根据一楼和二楼的内容重新整合了一下- setlocal enabledelayedexpansion
- SET /P file=请将需要处理的文件拖入本窗口:
- SET /P init=请输入生成数组起始值:
- CLS
- set str=.STRINGS
- ECHO %str%>logo.st
- SET str1=^$str[
- SET /a str2=%init%
- SET str3=^] = "
- SET str4=^"
- for /f "delims=" %%i in (%file%) do (
- SET "strall=%str1%!str2!%str3%%%i%str4%"
- ECHO !strall!>>logo.st
- SET /a str2=!str2!+1
- )
- SET str=.END
- ECHO %str%>>logo.st
- ECHO 数据处理完成
- PAUSE
复制代码
更简化的写法(二楼的程序)- setlocal enabledelayedexpansion
- SET /P file=请将需要处理的文件拖入本窗口:
- SET /P init=请输入生成数组起始值:
- CLS
- ECHO .STRINGS>logo.st
- for /f "delims=" %%i in (%file%) do echo $str[!init!] = "%%i">>logo.st&set /a init+=1
- ECHO .END>>logo.st
- ECHO 数据处理完成
- PAUSE
复制代码
这个代码对某些特殊符号就没用了,比如带分号的就过滤了.
感谢七楼的 0000 代码,完美解决各种特殊字符的问题- @echo off
- setlocal enabledelayedexpansion
- set /p input=输入文件名:
-
- type "!input!"|find /v /c "">_
- set /p n=<_
- <"!input!" >"abcd.txt" (
- echo .STRINGS
- for /l %%a in (1,1,!n!) do (
- set /p i=
- echo $str[%%a] = "!i!"
- )
- echo .END
-
- )
复制代码
高人啊,哈哈~
最终我改了一下代码- setlocal enabledelayedexpansion
- set /p input=输入文件名:
-
- type "!file!"|find /v /c "">temp.a
- set /p n=<temp.a
- <"!file!" >"abcd.txt" (
- echo .STRINGS
- for /l %%a in (1,1,!n!) do (
- set /p i=
- echo $str[%%a] = "!i!"
- )
- echo .END
- )
- DEL /F temp.a
复制代码
这样就更好理解了.
作者: cfwyy77_bat 时间: 2017-10-16 09:56
好像是变量延迟问题啊,有些变量都 用!!了 ,为什么不开变量延迟?
前面开变量延迟- setlocal enabledelayedexpansion
复制代码
后面for 语言中 要改一改- SET strall=%str1%!str2!%str3%%%i%str4%
- ECHO !strall!>>abcd.txt
- SET /a str2=!str2!+1
复制代码
差不多应该可以了。
作者: Blitz 时间: 2017-10-16 14:08
本帖最后由 Blitz 于 2017-10-16 14:22 编辑
- @echo off&setlocal enabledelayedexpansion
- set /p file=请将需要处理的文件拖入本窗口:
- set /p init=请输入生成数组起始值:
- cls
- echo .STRINGS>abcd.txt
- for /f "delims=" %%i in (%file%) do echo $str[!init!] = "%%i">>abcd.txt&set /a init+=1
- echo .END>>abcd.txt
- echo 数据处理完成
- pause
复制代码
主要问题就是二楼说的没开变量延迟,还有你代码太杂乱了,那么多set干嘛,固定不变的直接echo就行了
作者: 冰剑 时间: 2017-10-16 17:55
回复 3# Blitz
如果源文件里面有特殊符号怎么能让批处理不过滤呢?
比如分号,等号,大于号之类的
作者: Blitz 时间: 2017-10-16 19:14
回复 4# 冰剑
你举个列子吧,因为我这边好像没问题
作者: Blitz 时间: 2017-10-16 19:39
回复 4# 冰剑
哦哦,发现以分号开头的行会被过滤了,改成这样:- @echo off&setlocal enabledelayedexpansion
- set /p file=请将需要处理的文件拖入本窗口:
- set /p init=请输入生成数组起始值:
- cls
- echo .STRINGS>abcd.txt
- for /f "eol= delims=" %%i in (%file%) do echo $str[!init!] = "%%i">>abcd.txt&set /a init+=1
- echo .END>>abcd.txt
- echo 数据处理完成
- pause
复制代码
作者: 0000 时间: 2017-10-16 23:02
本帖最后由 0000 于 2017-10-16 23:04 编辑
回复 5# Blitz
在里面加个'!'试一下- @echo off
- setlocal enabledelayedexpansion
- set /p input=输入文件名:
- set /p output=输出文件名:
-
- type "!input!"|find /v /c "">_
- set /p n=<_
- <"!input!" >"!output!" (
- echo .STRINGS
- for /l %%a in (1,1,!n!) do (
- set /p i=
- echo $str[%%a] = "!i!"
- )
- echo .END
- )
复制代码
作者: Blitz 时间: 2017-10-17 10:13
回复 7# 0000
对。。都忘了变量延迟和感叹号了,能不能把你的代码注释一下,学习学习
作者: 冰剑 时间: 2017-10-17 16:13
回复 8# Blitz
setlocal enabledelayedexpansion
set /p input=输入文件名:
type "!file!"|find /v /c "">temp.a/统计文件内行数,并保存到临时文件temp.a中
set /p n=<temp.a /从临时文件读入行数
<"!file!" >"abcd.txt" ( /读取源文件并保存到abcd.txt,条件是:
echo .STRINGS
for /l %%a in (1,1,!n!) do (
set /p i=
echo $str[%%a] = "!i!"
)
echo .END
)
DEL /F temp.a /删除临时文件
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |