2013-07-17 15 views
5

Mam plik wsadowy, który pobiera zmienne o zmiennej długości. Na przykład dane wyjściowe są następujące:Wyrównywanie danych wsadowych do kolumn

%name% - %size% - %percentage% - %percentMIN% - %percentMAX% 
%name% - %size% - %percentage% - %percentMIN% - %percentMAX% 
%name% - %size% - %percentage% - %percentMIN% - %percentMAX% 
%name% - %size% - %percentage% - %percentMIN% - %percentMAX% 
%name% - %size% - %percentage% - %percentMIN% - %percentMAX% 

Ponieważ pierwsze 2 kolumny różnią się długością, wyjście wygląda w każdym miejscu. Czy istnieje jakiś sposób w pliku wsadowym, aby kolumny były wyrównane? Zrobiłem kilka badań i wydaje się, że jest sposób, aby to zrobić, wypełniając początkową grupę postaci spacjami? Ale to chyba nie działa? Czy jest może inny sposób?

+1

ok, tylko w ten sposób można osiągnąć pożądaną odpowiedź za pomocą partii i plik .txt jest poprzez ustawienie maksymalnej długości dla nazwy i liczby cyfr w rozmiarze. (Liczba jak 15 wydaje się być korzystna). Wtedy musiałbyś użyć soloution w tym pytaniu: [link] (http://stackoverflow.com/questions/5837418/how-do-you-get-the-string-length-in-a-batch-file) aby znaleźć długość każdego '% name%' i '% size%', a następnie utwórz var, który będzie uwzględniał te spacje, jak również nazwę lub rozmiar. W ten sposób każdy będzie miał taką samą długość w pliku tekstowym. Ostatecznym soloution byłoby: – Monacraft

+1

Znajdź długość wszystkich zmiennych '% name%' i '% size%', określić, który jest największy dla obu i zastąpić maksymalną liczbę zestaw (sugeruje być 15) z o wielkości największej nazwy i rozmiaru, iw ten sposób twoje "dopełnianie komórek" zajmowałoby tak mało miejsca, jak to tylko możliwe, i chociaż to by dodało wiele kodu do twojego programu, to uczyniłoby to go lepszym i zdolnym do być wykorzystywane do większej ilości rzeczy (po adaptacji) – Monacraft

Odpowiedz

4
@ECHO OFF 
SETLOCAL 
SET "spaces=        " 
SET "somethingelse=Some other data" 
SET "name=abc" 
SET /a size=123 
CALL :formatout 
SET "name=abcdefghijkl" 
SET /a size=12345678 
CALL :formatout 
SET "name=a" 
SET /a size=3 
CALL :formatout 

GOTO :EOF 

:formatout 
CALL :padright name 18 
CALL :padleft size 13 
ECHO +%name%+%size%+%somethingelse% 
GOTO :eof 

:padright 
CALL SET padded=%%%1%%%spaces% 
CALL SET %1=%%padded:~0,%2%% 
GOTO :eof 

:padleft 
CALL SET padded=%spaces%%%%1%% 
CALL SET %1=%%padded:~-%2%% 
GOTO :eof 

To demo powinno ustawić się na właściwym torze ...

wyjście jest

+abc    +   123+Some other data 
+abcdefghijkl  +  12345678+Some other data 
+a     +   3+Some other data 
Powiązane problemy