Skrypt zamieniający nazwę pliku na ciąg cyfr znajdujący się w zawartości

0

Hej. Problem jak w temacie. Potrzebuję na szeroką skalę (kilka tysięcy plików) zamienić nazwy plików txt na ciąg cyfer znajdujących się w określonej linii każdego z nich.
Dla przykładu nazwa pliku starego abc143425 -> nowy 12345(cyfry zaciągnięte z 10 linii tegoż pliku txt.)
Natknąłem się na program ReNamer Lite, który myślę mógłby pomóc w tym działaniu. Przy ustalaniu reguły zamiany można zrobić to poprzez "Skrypt (pascal)".
Jeden ze skryptów to "lines from file", którego "konfiguracja" to":

var
 I: Integer;

begin
 I := I + 10;
FileName := FileReadLine('C:\Names.txt', I);
end.

Kompilacja kończy się jednak niepowodzeniem. Za wszelkie rady czy wskazówki będę bardzo wdzięczny.

0

Kompilacja kończy się jednak niepowodzeniem

A może napiszesz, co konkretnie się dzieje?
Jeśli jest błąd kompilacji, to fajnie, jakbyś go tutaj wkleił :P

Poza tym fragment I: Integer; I := I + 10; jest... powiedzmy, że trochę dziwny ;) albo jest to wyjęte z szerszego kontekstu, albo zostało niepoprawnie napisane. I nie mam na myśli błędu składniowego, co błąd logiczny.

0

Może nie działa dla tego iż nie zadeklarowałeś wartości startowej dla I. Jak ma dodać 10 do I skoro nie wie ile wynosi I.

0

@titako: zmienne globalne są inicjalizowane automatycznie, a kod wygląda na skladniowo poprawny.

@krswwa: opis problemu słowami „Kompilacja kończy się jednak niepowodzeniem” mówi tylko tyle, że gdzieś jest problem. Podaj komunikat błędu jak chcesz aby ktokolwiek pomógł Ci z tym programem.

0

Bardzo możliwe, że jest tak jak wspomniałeś. Generalnie moja wiedza programistyczna stoi na niskim poziomie stąd trafiłem na ten sprytny program. Oczywiście funkcjonalność nie pozwala poszaleć, ale jest ta zakładka ze skryptami.
Udało mi się to zrealizować dla jednego pliku. Błąd był najbardziej trywialny z możliwych czyli błędna nazwa pliku w komendzie... Teraz natomiast nie do końca potrafię zrobić to dla całego folderu. Załączam screeny z programu.
PS: 10 w skrypcie to wiersz, z którego chciałbym pobrać treść do pliku.
Dzięki!

1

No ale przecież w ostatnim komunikacie masz jasno napisane w czym leży problem - starasz się otworzyć i czytać z pliku, którego nie ma (D:\thesis_plain) :P

0

Tak, wiem. Nie wiem jakie polecenie umożliwiałoby sprawdzenie wszystkich plików z tego folderu.

2

ale żeby do dokumentacji zajrzeć to już zabrakło pomyślunku/chęci...

Tips
A few quick tips:
• In Pascal Script, ReNamer has defined the FileName variable to represent the "New Name" of a file. Therefore,
in your script, you will have to manipulate this variable to change the filename. Changes to the FileName variable
do not actually change the name of the file, they simply change the value in the "New Name" column. Changes
are applied only when you click the "Rename" button.
The FilePath constant holds the original path of the file. It allows you to access the file directly.
• ReNamer supports User Defined Functions (UDF) and also importing of external functions from DLLs.
• Try to use WideString type instead of an ordinary String type. This will allow ReNamer to handle Unicode
filenames. In other words, it will be able to handle non-English scripts, such as Cyrillic, Asian, German, French,
etc.
• You may use {$INCLUDE 'filename.inc'} directive to include code from an external file, allowing for
easier reuse and better organization of your code. Available since v6.5.0.1 Beta.

0

Dziękuję za wasze wskazówki, cały czas je przeglądam. Nie jestem programistą, pojawiła się potrzeba więc próbuję teraz coś tworzyć i wkręcić się w temat.

0
abrakadaber napisał(a):

The FilePath constant holds the original path of the file. It allows you to access the file directly.

@abrakadaber rozumiem to jako możliwość zmian wyłącznie dla pojedynczego pliku (?). Jesteś w stanie podpowiedzieć coś więcej w temacie?

1

napisałeś

zamienić nazwy plików txt na ciąg cyfer znajdujących się w określonej linii każdego z nich.

czyli wnioskuję z tego, że chcesz zmienić nazwę pliku x1 na to co ma plik x1 w 10 lini, dla pliku x2 nazwę chcesz ustawić na taką jaką ma w 10 lini plik x2 itd. Więc w skrypcie musisz ustawić zmienną FileName na to co dany plik ma w 10 linii. "dany plik" siedzi w zmiennej FilePath i to z niej musisz wyciągnąć 10 linię, czyli tu FileName := FileReadLine('C:\Names.txt', I); za 'C:\Names.txt' musisz wstawić FilePath i dla każdego pliku będziesz miał wyciąganą 10 linię z niego samego i to co wyciągniesz będzie przekazywane jako nowa nazwa pliku

1 użytkowników online, w tym zalogowanych: 0, gości: 1