Har du lavet en parser til din rename-streng?
Her er min umiddelbare ide:
Siden jeg ikke ved du har informationerne som år, måned, sekvensnr og deltagernr, antager jeg at de findes i en klasse FileInfo.
Du har et interface som givet en FileInfo returnerer en streng der repræsenterer filnavnet:
- interface Renamer {
- public String GetFileName(FileInfo info);
- }
Du parser rename-strengen og med den laver en instans af en klasse der implementerer Renamer. Parsingen kan eventuelt foregå i denne klasse hvis ikke udenfor.
Så i din loop vil du lave noget lign:
- foreach (FileInfo fInfo in filesInfos) {
- String newName = myRenamer.GetFileName(fInfo);
- //.. rename fil
- //....
- };
Spørgsmålet er så hvordan din renamer fungerer internt. En ide er at lave et andet interface som igen givet en FileInfo returnerer en streng. Men denne gang er strengen en del af et filnavn. I implementeringen af din Renamer kunne ligne det her:
- public String GetFileName(FileInfo info) {
- StringBuilder sb = new StringBuilder();
- foreach (IRenamePart partRenamer in renameParts) {
- sb.append(partRenamer.GetFilePart(info));
- }
-
- return sb.ToString();
- }
Dine IRenamePart kommer fra parsingen. F.eks. når du læser
$P(5) laver du måske en instans af
ParticipantPart, som implementerer IRenamePart, hvor du kalder constructoren med
5. Når så kalder dens GetFilePart(info) så returner den deltagernr som 5 tegn langt. For alt det "udenfor" $'erne kan du f.eks. lave en
StringPart som blot returnerer strengen og ignorer den FileInfo du fik sendt.
Er godt klar over at det er nogle dårlige navne jeg er kommet på men jeg kender ikke domænet. Mit gæt er det har noget med sport at gøre.
Indlæg senest redigeret d. 29.07.2012 19:27 af Bruger #14645