Ahoj,
potřeboval bych od někoho, kdo má zkušenost s Pascalem, aby mi poradil jak napsat jednoduchou funkci.
Mám program na hromadné přejmenovávání souborů Renamer. Má spoustu užitečných funkcí, nicméně k mojí práci mi tam jedna funkce chybí. Program má na vlastní funkce zakomponované okénko, kam se může napsat funkce pro Pascal, kterou si to potom samo přechroustá.
Potřebuji tedy, jestli by někdo dokázal sem napsat kód pro funkci, která by otočila podle nějakého znaku v textu název souboru. Konkrétně, mám-li např. Mp3 pojmenovanou tak že je nejdříve název písničky a potom teprv autor: "help - beatles", potřebuji napsat funkci, která dokáže jediným kliknutím přejmenovat soubor na "beatles - help". Je to možné? Díky předem za odpovědi.
P.S. pokud tu funcki dokážete dát dohromady, napište mi prosím, ve kterých částech se mění parametry apod. díky!
Fórum › Pascal
Script v Renameru
A v C# za několik sekund :smile1: ....
Vždycky je tu přece možnost řešit to "hrubou silou". V prvním průchodu řetězce si najdeš oddělovač - jeho pozici. Následně do výsledného řetězce překopíruješ vše od této pozice + 1 až do konce, pak přídáš oddělovač a pak za to nasmažíš vše od začátku až do pozice oddělovače - 1.
Pokud bude oddělovač taky řetězec (např. " - "), tak je to jen o nalezení pozice oddělovače.
loborb ja si samozrejme uz z principu davam rezervu.. treba na skrabani na zadku :D
while ( $f = <*.mp3> ) {
if ( $f =~ /^(.*)\s*-\s*(.*)(\.mp3)$/) {
print "move '$f' '$2 - $1$3'\n";
}
}
to by melo teoreticky vygenerovat seznam prikazu pro presunuti.. nechtelo se mi hledat prikazy :)
-> Tomáš Dvořák : Přesně jak píše Liborb. Otázkou ale je, co všechno ten program podporuje. Podle tvého popisu to tipuju na úplně samostatné prostředí, které má s Pascalem společnou jenom syntaxi, takže tam standardní funkce jednotky System třeba ani nemusí být. Jestli k němu máš nějaký manuál, koukni do něj.
Obvykle se pozice řetězce v jiném řetězci (typ String) hledá funkcí Pos(hledaný řetězec, řetězec k prohledání), délka se určí funkcí Length(řetězec), úsek se vykopíruje funkcí Copy(zdrojový řetězec, počáteční pozice, počet znaků) a spojování se provádí operátorem +. Pak ještě je funkce Delete(řetězec, pozice, počet znaků), která z daného řetězce vykousne pár znaků. Případně se ještě dají přímo číst jednotlivé znaky řetězce, jako by to bylo pole array[1..length(řetězec)] of char.
Ve kterých částech se mění parametry... nevím, co přesně tím myslíš. Jako vstupní parametr té funkci nejspíš předáš původní jméno souboru a možná ještě řetězec, který má sloužit jako oddělovač. Jako výstup (návratovou hodnotu) ti vrátí nové jméno, nic víc tam nebude.
Takže asi takhle:
function otoc(jmeno,oddelovac:string):string;
var po:byte;
Begin
po:=pos(oddelovac,jmeno); {pozice prvniho znaku oddelovace v puvodnim jmenu}
if po=0 then otoc:=jmeno {oddelovac tam neni, neni podle ceho otacet}
else otoc:=copy(jmeno,po+length(oddelovac),255) {cast za oddelovacem (255=vse az do konce jmena)}
+oddelovac
+copy(jmeno,1,po-1); {cast pred oddelovacem}
End;
Volání třeba takhle: novejmeno:=otoc('help - beatles',' - ');
Zkus a uvidíš.
Moje stránka.
Krucinál, myslel jsem, že to bude o něco jednodušší :D
Co se programování týče, jsem naprostý laik, takže většině Vašich vysvětlivek moc nerozumím. Ale Vím že otáčení podle pozice v textu mi neřeší problém, protože potřebuju otáčet stovky názvů naráz, kde samozřejmě znak "-" je pokaždé jinde, zkusím se poprat s tím, co jste výše dávali, snad něco z toho bude fungovat.
Mimochodem ReNamer je volně ke stažení, na slunečnici, stahuj.cz, takže kdyby jste chtěli získat lepší obrázek, asi je lepší kouknout tam, než si to nechat vyprávět ode mě ;)
V okénku pro vložení je následující:
begin
// type your function here
end.
Nicméně, když zkopíruju kód do onoho místa, plive mi to hlášku "Line 3 syntax error"
Ale Vím že otáčení podle pozice v textu mi neřeší problém, protože potřebuju otáčet stovky názvů naráz, kde samozřejmě znak "-" je pokaždé jinde.
Taky všechny ty nápovědy začínaly tím, že pozici toho znaku (skupiny znaků) najdeš v tom daném řetězci před jeho otočením. Pro každý jeden. Pokaždé. Nikoliv najít v prvním a ostatní podle toho.
-> Tomáš Dvořák : No jo: syntaxe je podobná Pascalu (begin, end), ale skutečný Pascal to není (Kde je hlavička funkce? Jak to, že je za end tečka a ne středník?).
Na Slunečnici jsem manuál nenašel a stahovat a instalovat ten program rozhodně nehodlám. Google mi na slovo Renamer vyplivl podobných programů tolik, že nevím, který si vybrat.
Když mi ukážeš ten manuál, možná ti budu schopen poradit. Ale takhle těžko, protože netuším, jak se do té funkce mají předat parametry, jak se z ní má dostat výsledek a jestli se tam vůbec dají deklarovat pomocné proměnné.
Moje stránka.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Script — založil papajohn
Script v luc — založil lololol
Data ze <script> — založil survik1
Script jquery — založil Paja2
FF a tento script? — založil Dominik Franěk
Moderátoři diskuze