我有一个名为“letters.txt”的文件中的字母列表和一个名为“LetterPerSample.txt”的文件中每个字母的出现次数列表,这两个文件都是排列的,所以第一行的letters.txt有一个“a”第二个有“b”......等,同样对于SamplePerLetter.txt,第一行的最大数量为“a”,第二行的最大数量为“b”,因此,我想创建一个列表像这样的文件a_1,a_2,..... a_max.txt,其中max是上面列出的数字,生成的每个文件都有自己写的字母。所以a_1.txt里面写着“a”,b_5.txt写有“b”等等
到目前为止我所做的是:
@echo off
setlocal enableDelayedExpansion
for /f "tokens=*" %%a in (letters.txt) do (
set letter=%%a
for /f "tokens=*" %%b in (SamplePerLetter.txt) do (
set num=%%b
for/L %%g IN (1,1,!num!) do (
set index=%%g
echo !letter!>letter_labels/!letter!/!letter!!index!.lab
)
)
)
输出样本
a_1.txt
a_2.txt
...
a_10.txt
b_1.txt
b_2.txt
...
b_10.txt
但是a和b在文件中没有相同的出现次数LetterPerSample.txt a有10而b有5,所以我的代码出了什么问题?
答案 0 :(得分:0)
你的问题是,simultanioulsly读取两个文件。这是一个诀窍:
@echo off
setlocal enabledelayedexpansion
<letterpersample.txt (
for /f %%a in (letters.txt) do (
set /p num=
for /l %%i in (1,1,!num!) do (
echo %%a>letter_labels\%%a\%%a%%i.lab
)
)
)
for
循环(%%a
)从letters.txt
读取另一行。 set /p
从STDIN读取一行(从letterspersample.txt
重定向),因此如果for
从一个文件中读取第5行,set /p
将从另一个文件中读取第5行。
(PS:我怀疑,你的echo
逻辑是好的。好像很奇怪)
答案 1 :(得分:0)
此方法不要求activation-1.1.jar
ant-1.5.jar
aopalliance-1.0.jar
bcprov-jdk15-133.jar
commons-attributes-api-2.1.jar
commons-beanutils-1.7.0.jar
commons-codec-1.3.jar
commons-discovery-0.2.jar
commons-httpclient-3.0.jar
commons-logging-1.1.3.jar
javax.servlet-api-3.1.0.jar
javax.servlet.jsp-api-2.3.1.jar
jaxb-api-2.0.jar
jaxb-impl-2.0.1.jar
jaxb-xjc-2.0.1.jar
jaxen-1.1-beta-9.jar
jaxws-api-2.0.jar
jdom-1.0.jar
jmock-1.0.1.jar
jsr173_api-1.0.jar
jstl-1.2.jar
junit-3.8.1.jar
mail-1.4.jar
opensaml-1.0.1.jar
qdox-1.5.jar
saaj-api-1.3.jar
saaj-impl-1.3.jar
spring-aop-4.0.6.RELEASE.jar
spring-beans-4.0.6.RELEASE.jar
spring-context-4.0.6.RELEASE.jar
spring-core-4.0.6.RELEASE.jar
spring-expression-4.0.6.RELEASE.jar
spring-web-4.0.6.RELEASE.jar
spring-webmvc-4.0.6.RELEASE.jar
stax-api-1.0.1.jar
stax-utils-20040917.jar
wsdl4j-1.6.1.jar
wss4j-1.5.1.jar
wstx-asl-3.2.0.jar
xbean-2.2.0.jar
xbean-spring-2.8.jar
xercesImpl-2.7.1.jar
xfire-aegis-1.2.6.jar
xfire-all-1.2.6.jar
xfire-annotations-1.2.6.jar
xfire-core-1.2.6.jar
xfire-generator-1.2.6.jar
xfire-java5-1.2.6.jar
xfire-jaxb2-1.2.6.jar
xfire-jaxws-1.2.6.jar
xfire-jsr181-api-1.0-M1.jar
xfire-spring-1.2.6.jar
xfire-ws-security-1.2.6.jar
xfire-xmlbeans-1.2.6.jar
xml-apis-1.0.b2.jar
xmlParserAPIs-2.6.2.jar
XmlSchema-1.1.jar
xmlsec-1.3.0.jar
文件中的字母按顺序排列,因此您可以在此类文件中只插入所需的字母:
letters.txt
您可以在this post的批处理文件中查看数组的管理。
如果@echo off
setlocal EnableDelayedExpansion
rem Load the number of occurrences of each letter from "LetterPerSample.txt" file
set "letters=abcdefghijklmnopqrstuvwxyz"
set "i=0"
for /F %%b in (LetterPerSample.txt) do (
for %%i in (!i!) do set "number[!letters:~%%i,1!]=%%b"
set /A i+=1
)
rem Process the letters in "letters.txt" file (in any order)
for /F %%a in (letters.txt) do (
set "letter=%%a"
set "num=!number[%%a]!"
for /L %%g in (1,1,!num!) do (
set "index=%%g"
echo !letter!>letter_labels\!letter!\!letter!_!index!.lab
)
)
文件的始终所有字母,从letters.txt
到a
,则此文件包含可以消除的冗余信息:
z