2016-05-06 9 views
1

Ich habe eine Liste von Buchstaben in einer Datei namens "letters.txt" und eine Liste der Anzahl des Auftretens jedes Buchstaben in einer Datei namens "LetterPerSample.txt", beide Dateien sind angeordnet, so erste Zeile von letters.txt hat "a" zweite hat "b" ... etc, und das gleiche für SamplePerLetter.txt die erste Zeile hat max Nymber von "a", zweite hat maximale Anzahl von "b" und Also in, ich möchte eine Liste von Dateien wie diese erstellen a_1, a_2, ..... a_max.txt, wobei max eine Zahl wie oben aufgeführt ist, und jede generierte Datei hat ihren eigenen geschriebenen Buchstaben. So hat a_1.txt "a" geschrieben innen, b_5.txt hat "b" geschrieben und so weitererstellen Sie mehrere Textdateien aus einer Liste mit Batch-Datei

, was ich so weit ist getan:

@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 
    ) 
) 
) 

Probe des Ausgangs

a_1.txt 
a_2.txt 
... 
a_10.txt 
b_1.txt 
b_2.txt 
... 
b_10.txt 

aber a und b hat nicht die gleiche Anzahl von Vorkommen in der Datei LetterPerSample.txt a hat 10 und b hat 5, also was ist falsch mit meinem Code?

+5

Ich fürchte, Ihre Frage ziemlich verwirrend. Veröffentlichen Sie ein kleines Beispiel der Eingabedateien (zwei oder drei Zeilen) und die gewünschte Ausgabe mit dieser Eingabe ... – Aacini

+0

Ich habe die Frage umformuliert, hoffe es hilft –

+1

Ihre Frage ist wirklich unklar; Die Beschreibung dessen, was Sie tun möchten, ist etwas verstümmelt und verwirrend. Es ist auch unklar, was das Problem mit Ihrem Code ist; Du hast nicht erklärt, wie es nicht so funktioniert, wie du es willst. Ich kann wirklich keinen Sinn aus * machen, aber a und b haben auch nicht die gleiche Häufigkeit *. Ich habe keine Ahnung, was du verlangst, auch nach deinem Schnitt. –

Antwort

0

Diese Methode erfordert nicht, dass die Buchstaben in letters.txt Datei um, so dass Sie nur die gewünschten Buchstaben in einer solchen Datei einfügen können:

@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 
    ) 
) 

Sie können die Verwaltung von Arrays in Batch-Dateien auf this post überprüfen.

Wenn letters.txt Datei immer alle Buchstaben, von a zu z, dann wird diese Datei enthalten redundante Informationen, die beseitigt werden können:

@echo off 
setlocal EnableDelayedExpansion 

rem Load the number of occurrences of each letter from "LetterPerSample.txt" file 
rem and create the desired files 

set "letters=abcdefghijklmnopqrstuvwxyz" 
set "i=0" 
for /F %%b in (LetterPerSample.txt) do (
    for %%i in (!i!) do set "letter=!letters:~%%i,1!" 
    set /A i+=1 
    set "num=%%b" 
    for /L %%g in (1,1,!num!) do (
     set "index=%%g" 
     echo !letter!>letter_labels\!letter!\!letter!_!index!.lab 
    ) 
) 
+0

Vielen Dank. Der Array-Trick hat es geschafft! –

0

Ihr Problem ist, zwei Dateien simultaniously zu lesen. Hier ist ein Trick, dies zu tun:

@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 
    ) 
) 
) 

Die for Schleife (%%a) liest eine Zeile nach der anderen aus letters.txt. set /p liest eine Zeile von STDIN (die von letterspersample.txt umgeleitet wird). Wenn for Zeilennummer 5 aus einer Datei liest, liest set /p Zeilennummer 5 von der anderen.

(PS:. Ich bezweifle, Ihre echo Logik in Ordnung scheint ungerade)

Verwandte Themen