Mariusz
P.
Specjalista ds.
informatyki
Temat: Algorytm dodawania liter do końca nazwy pliku
WitamCzy istnieją jakieś algorytmy dotyczącego tego tematu? Liter w alfabecie mamy ponad dwadzieścia parę. Te z ogonkami raczej mnie nie interesują. I tylko małe (bez rozpoznawania wielkości). Pierwszy plik bez dodawania litery, drugi z dodaną literą "a", trzeci z "b" itd. Co w przypadku gdy plików jest więcej niż liter alfabetu? Stosować dodawanie kombinacji dwóch lub więcej liter? Można by wykorzystać do tego celu tablicę ASCII (lub jeśli to możliwe Unikod)?
Pozdrawiam
Paweł Grzegorz
Kwiatkowski
Senior Consultant,
Capgemini
Temat: Algorytm dodawania liter do końca nazwy pliku
Proponuję numer pliku konwertować do systemu o podstawie 26 i zamiast cyfr używać liter alfabetu.A=0,B=1,...,Z=25
Wówczas np. numer pliku 100 (decymalnie)
100 = 3*26^1 + 22*26^0
D=3
W=22
100 => DW.
Numer pliku: 1500
1500 = 2*26^2 + 5*26^1 + 18*26^0
1500 => CFS
pozdrawiam,
Paweł
Dariusz
Wawer
Programista, CC
Otwarte Systemy
Komputerowe
Temat: Algorytm dodawania liter do końca nazwy pliku
IMO - napisać generator sekwencji OD RAZU określonej długości, np. 3 znaków, przy czym zakres proponowałbym: 48-57,97-122 czyli cyfry *i* litery. Przy 3 znakach mamy 35^3 możliwości, czyli ponad 40k. Reszta jak u Grzegorza.
Jakub
Wojt
Projektant systemów
IT, Team Leader,
Programista .NET C#
Temat: Algorytm dodawania liter do końca nazwy pliku
Mariusz P.:
Witam
Czy istnieją jakieś algorytmy dotyczącego tego tematu? Liter w alfabecie mamy ponad dwadzieścia parę. Te z ogonkami raczej mnie nie interesują. I tylko małe (bez rozpoznawania wielkości). Pierwszy plik bez dodawania litery, drugi z dodaną literą "a", trzeci z "b" itd. Co w przypadku gdy plików jest więcej niż liter alfabetu? Stosować dodawanie kombinacji dwóch lub więcej liter? Można by wykorzystać do tego celu tablicę ASCII (lub jeśli to możliwe Unikod)?
Pozdrawiam
Ja bym to zrobił tak:
Jakub Wojt edytował(a) ten post dnia 23.01.12 o godzinie 10:47
private static String getSufix(int i)
{
char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
StringBuilder builder = new StringBuilder();
do
{
builder.append(alphabet[i % alphabet.length]);
i /= alphabet.length;
}while(i > 0);
return builder
.reverse()
.toString();
}
Tomasz
Szymański
Senior Konsultant,
Marketplanet
Temat: Algorytm dodawania liter do końca nazwy pliku
Ładnie, ale jeśli zaakceptować pełen alfabet liter i cyfr, o którym pisał Dariusz, to można skorzystać z dorobku twórców standardowej biblioteki Javy i zrobić to prościej ;-)
public static String getSuffix(int i) {
return Integer.toString(i, Character.MAX_RADIX);
}
Mariusz
P.
Specjalista ds.
informatyki
Temat: Algorytm dodawania liter do końca nazwy pliku
Tomasz Szymański:
public static String getSuffix(int i) {
return Integer.toString(i, Character.MAX_RADIX);
}
No nie wiem czy do końca tu zrozumiałem intencje. Podając jako parametr tej metody np. 70 dostaniemy na wyjściu 1y. Character działa na Unicode, MAX_RADIX to stała (36) dająca nam podstawę przy konwersji.
Tomasz
Szymański
Senior Konsultant,
Marketplanet
Temat: Algorytm dodawania liter do końca nazwy pliku
Intencje są takie same, jak u kolegów powyżej: przedstawić liczbę oznaczającą numer pliku w systemie liczbowym o podstawie innej, niż 10. Większej, niż 10, bo wtedy zapis będzie potencjalnie krótszy. Maksymalna podstawa, przy której możemy użyć "alfabetu" złożonego z cyfr dziesiętnych i liter łacińskich, to 36, bo tyle w sumie jest tych znaków.Przytoczona przeze mnie metoda nie robi nic innego. Tyle, że ona z góry zakłada, że ten "alfabet" jest właśnie taki: 0123456789abcdefghijklmnopqrstuvwxyz. Twoje oryginalne pytanie w zasadzie nie przewidywało cyfr, tylko litery. Jeżeli rzeczywiście Ci na tym zależy, to użyj kodu Jakuba :-)
Adam
Woźniak
managing consultant
(formally), software
architect (actua...
Temat: Algorytm dodawania liter do końca nazwy pliku
Od siebie dodam:Proponuję ustalić ile znaków maksymalnie może mieć ten string doklejany do końca nazwy pliku (MAKS_DLUGOSC), a następnie jeśli wygenerowany string jest krótszy od MAKS_DLUGOSC to uzupełniać go np. zerami.
Chodzi o to, aby pliki takie dało się ładnie i sprawnie sortować po nazwie i aby nie dochodziło, że po posortowaniu plików leksykograficznie (czyli po nazwie), te z wyższą wygenerowaną wartością, były przed tymi z niższymi wartościami. Przykład:
plik_1.txt
plik_11.txt
plik_2.txt
plik_3.txt
Mariusz
P.
Specjalista ds.
informatyki
Temat: Algorytm dodawania liter do końca nazwy pliku
Pomysł z uzupełnianiem zerami nazwy pliku do jego maksymalnej długości chyba jest nietrafiony. Nie lepiej zaimplementować sobie odpowiednie sortowanie alfanumeryczne (a nie po ASCII)? Zwłaszcza, że gotowe implementacje są do znalezienia w sieci np.: http://www.davekoelle.com/alphanum.html
Dariusz
Wawer
Programista, CC
Otwarte Systemy
Komputerowe
Temat: Algorytm dodawania liter do końca nazwy pliku
Albo posortować po dacie. *Albo*, jak pisałem, dodawać stałą liczbę liter.Czy problem jest w ogóle jeszcze aktualny?
Mariusz
P.
Specjalista ds.
informatyki
Temat: Algorytm dodawania liter do końca nazwy pliku
Mniej więcej wszystko jasne :-) Raczej więcej :-) W sumie to należy stworzyć sobie coś na wzór Base64?
Adam
Woźniak
managing consultant
(formally), software
architect (actua...
Temat: Algorytm dodawania liter do końca nazwy pliku
Mariusz P.:
Pomysł z uzupełnianiem zerami nazwy pliku do jego maksymalnej długości chyba jest nietrafiony. Nie lepiej zaimplementować sobie odpowiednie sortowanie alfanumeryczne (a nie po ASCII)? Zwłaszcza, że gotowe implementacje są do znalezienia w sieci np.: http://www.davekoelle.com/alphanum.html
Zasugerowałem uzupełnianie zerami, tak aby poprawnie pliki wyświetlały się w konsoli (komendy ls, dir, etc.) oraz menadżerach plików (Total Commander, Explorer, etc.).
Mariusz
P.
Specjalista ds.
informatyki
Temat: Algorytm dodawania liter do końca nazwy pliku
Kiedy Eksplorator Windows ma właśnie sortowanie alfanumeryczne. Nie wiem jak inne narzędzia, ale np. taki NexusFile podobnie. Co do dir to masz rację.Mariusz P. edytował(a) ten post dnia 25.01.12 o godzinie 16:22
Adam
Woźniak
managing consultant
(formally), software
architect (actua...
Temat: Algorytm dodawania liter do końca nazwy pliku
Mariusz P.:
Kiedy Eksplorator Windows ma właśnie sortowanie alfanumeryczne. Nie wiem jak inne narzędzia, ale np. taki NexusFile podobnie. Co dir masz rację.
U mnie Total Commander sortuje tak:
plik_1.txt
plik_11.txt
plik_2.txt
Explorer faktycznie sortuje tak:
plik_1.txt
plik_2.txt
plik_11.txt
Uzupełnienie zerami spowoduje, że bez względu na użyte narzędzie, sortowanie będzie wyglądało tak samo.
Mariusz
P.
Specjalista ds.
informatyki
Temat: Algorytm dodawania liter do końca nazwy pliku
Adam Woźniak:
Uzupełnienie zerami spowoduje, że bez względu na użyte narzędzie, sortowanie będzie wyglądało tak samo.
Ok. Ja jednak będę stał po drugiej stronie barykady ;-) Miało nie być cyferek, tylko literki :-) Sio mi z tymi cyferkami i ułatwianiem sobie życia ;-) No, ale poważnie to jest to jakiś sposób.
Kamil
Mikołajczyk
programista Java /
Grails, itSilesia,
Gliwice
Temat: Algorytm dodawania liter do końca nazwy pliku
taka sobie propozycja:
public class Test {
private char cipherChar(char input) {
if (Character.isLetter(input)) {
return (char) (input + 10);
} else {
return (char) (input - '0' + 'a');
}
}
private String getSuffix(int number) {
String input = Integer.toString(number, 26);
StringBuilder sb = new StringBuilder();
for(int i=0; i<input.length(); i++) {
sb.append(cipherChar(input.charAt(i)));
}
return sb.toString();
}
public static void main(String[] args) {
Test t = new Test();
for(int i=0; i<1000; i++) {
System.out.println(t.getSuffix(i));
}
}
}
kod można mocno skrócić, ale zostawiam tak żeby idea była czytelna. wady? po "z" daje "ba", a po "zz" daje "baa" zamiast zaczynać od "aa"/"aaa"Kamil Mikołajczyk edytował(a) ten post dnia 25.01.12 o godzinie 17:31
