Wykorzystanie pliku txt jako źródła zmiennych dla batch-a XP


(S Szombara) #1

CZołem,

Właściwie nie wiem czy tu powinienem to pisać...

Mam taką zagwozdkę. Tworzę batch-a do zarządzania danymi pogrupowanymi w katalogach stanowiących jedną cząstką danych. Muszę wykonać polecenie programem zewnętrznym (jeden z programików programu FUSION), na każdym z osobna pliku w katalogu. Polecenie normalnie (wpisywane w cmd) wygląda tak:

LDA2ASCI nazwa_pliku.lda nazwa_pliku.asc

Problem w tym że programik LDA2ASCII nie pozwala na użycie znaków * i ? zastępujących ciągi i litery. Pomyślałem, że mógłbym wykorzystać listę plików do przetworzenia umieszczoną w zewnętrznym pliku txt jako listę zmiennych kolejno wczytywanych do polecenia w pętli. Ale nie wiem czy CMD pozwala na taką operację, czyli na wczytanie wiersza pliku txt o konkretnym numerze do wykonywanego polecenia.

Czy jest to możliwe? Czy w ogóle dobrze rozumuję?

Proszę o pomoc w gardłowej sprawie.

pozdrawiam

SS


(Tomasz Janikowski) #2

Coś takiego kiedyś robiłem (jakieś 14 lat temu w DOSie 3.30, czy 5.00), ale zabij mnie - nie pamiętam składni. Jednak jeśli masz ten plik, żaden problem wciągnąć go do Excela (czy innego produktu mniej czy bardziej darmowego) i w kolejnej kolumnie zrobić konkatenację (połączenie) komendy LDA2ASCI z resztą linii. Po tym eksportujesz zawartość kolumny wynikowej do pliku .BAT i masz gotowego "bacza". Domyślam się, że co bardziej wyuzdane edytory tekstowe udostępniają mechanizm pozwalający na operowanie tekstem blokowo w tym wklejanie dowolnego tekstu, ale osobiście posłużyłbym się Excelem.


(S Szombara) #3

CZ,

Dzięki za odpowiedź, ale tak właśnie sobie teraz radzę, jak coś muszę przeliczyć. Jednak cały zbiór stanowi 353 katalogi, więc szukam rozwiązania systemicznego i na przyszłość. Korzystam z UltraEdita-32. Wiem, że mogę wczytać wszystkie listy plików z 353 katalogów do UltraEdita, wcześniej sporządzić makro robiące dla mnie batch-e dla każdego katalogu a te odpalić jednym batch-em. Jednak nieco mnie to przeraża i jakbym mógł nie uciekać się do edytorów tekstowych to by było miodzio :slight_smile:

SS


(Tomasz Janikowski) #4

Ja bym zrobił to jeszcze inaczej: Napisałbym program, który pobierałby z pliku ciąg zawierający nazwę pliku do skonwertowania wraz ze ścieżką do katalogu w którym ten plik się znajduje, a następnie wywoływał program podając stosowne nazwy plików jako parametr. Oczywiście takie rozwiązanie aż prosi się o zgrabną otoczkę w postaci obsługi błędów, parametryzacji i tym podobnych. Ale takie coś służyłoby Ci dość dobrze i długo.

A tak w ogóle, to jak wygląda zawartość tego pliku z katalogami? To wynik komendy DIR przekierowanej na plik? Możesz wkleić kawałek takiego pliku wejściowego?


(S Szombara) #5

CZ,

Struktura katalogu roboczego jest następująca:

KALFE

  |-(...)

  |-17_24

  |-17_25

  |-(...)

Przykładowy katalog zawiera następujące pliki:

last_HF0021_3_5.LDA

last_HF0021_3_5.ldi

last_HF0021_3_5.ldx

last_HL0021_3_5.LDA

last_HL0021_3_5.ldi

last_HL0021_3_5.ldx

lista_lda.txt

Pliki .ldi i .ldx to pliki indeksów dla LDA. lista_lda.txt to lista plików LDA w katalogu. Podany przeze mnie przykładowy katalog jest oczywiście malutki, w największych jest do 20 LDA. A tak w ogóle to są to dane ze lotniczego skaningu laserowego, LDA to format binarny czytany tylko przez jeden program i muszę m.in. wyeksportować do formatu czytanego przez inny program.

SS

W dniu 06.05.2008 , o godzinie 15:02 został dopisany post przez tatanka88

CZ,

Piszesz jeszcze:

no właśnie nie wiem jak pobrać tę nazwę pliku z pliku :frowning:

SS


(Tomasz Janikowski) #6

Czyli reasumując, masz ileś katalogów, każdy z nich zawiera oprócz plików .LDA, .LDI i .LDX równiez plik LISTA_LDA.TXT, który w sobie zawiera listę plików LDA z danego katalogu. I to posiłkując się tym właśnie plikiem, chcesz dla każdego pliku, którego nazwa zawarta jest w pliku TXT, wykonać konwersję z LDA do ASCII. Dobrze rozumiem? Jeśli tak, to podpowiem Ci, że dla potrzeb realizacji takiego zadania, lepiej by było, gdybyś miał w katalogu nadrzędnym do tych które zawierają pliki .LD? (jak mniemam tutaj nazywa się on KALFE), plik zawierający nazwy i ścieżki do plików, które chcesz skonwertować. Oczywiście dotyczy to sytuacji, kiedy chcesz robić konwersję wszystkich plików .LDA, a nie tylko tych znajdujących się w wybranym katalogu. Aby uzyskać taką listę, wystarczy, że z linii komend będąc w katalogu KALFE wywołasz komendę

dir *.LDA /b /s >LDA2CNV.TXT

Co do pobrania nazwy pliku z pliku zawierającego ścieżki i nazwy wszystkich plików LDA, to metoda zależy od zastosowanego języka w którym napiszesz program który ma wywoływać konwerter. Przykładowo w VBA wyglądałoby to w rodzaju (piszę z głowy):

Open "ListaPlikowLDA.txt" for input As #1

do until not EOF(1)

   line input #1, NazwaPlikuLDA

  {przetwarzanie jakoś tego pliku}

loop

Ale to jest "rzeźba w g...", a ja nadal mam silne przeświadczenie, że już na etapie generowania listy plików za pomocą komendy DIR, można spowodować, że plik wynikowy będzie zawierał w każdej linii kompletną komendę do wykonania uzupełnioną o nazwę i ścieżkę do pliku który ma być skonwertowany. Tylko nie mogę się dokopać do tej informacji.W dniu 07.05.2008 , o godzinie 9:41 został dopisany post przez DobermanSłuchaj, na szybko zrobiłem tak, jak sugerowałem Ci na początku; 1. Stworzyłem plik zawierający listę plików do przetworzenia wraz ze ścieżkami w których te pliki rezydują (komenda DIR plus te wszystkie pizdrygałki - parametry). 2. Wrzuciłem zawartość pliku wynikowego do Excela do kolumny A 3. W komórce B1 wpisałem formułę

="copy """&A1&""" """&LEFT(A1;FIND(".";A1;1)-1)&".XYZ"""

co jako wynik dało mi komendę kopiowania pliku z nazwą podaną w komórce A1 do tego samego katalogu w którym leży orginalny plik, ale z nazwą pliku nie rozszerzoną o orginalne rozszerzenie, lecz o ciąg "XYZ"

  1. Skopiowałem formułę z B1 do wszystkich pozostałych linii.

  2. Skopiowałem zawartość kolumny B do pliku z rozszerzeniem BAT i dostałem ślicznego bacza robiącego kopię 673 plików TXT do plików XYZ o tej samej nazwie.

Oczywiście musisz pamiętać o ograniczeniu ilości linii w Excelu do 65536, ale jeśli masz więcej plików do przetworzenia, to pozostaje plik źródłowy zawierający listę plików LDA podzielić na kilka, co za pomoca UltraEdita łatwo zrealizować.