Mariusz P.

Mariusz P. Specjalista ds.
Rozwoju

Temat: Algorytm dodawania liter do końca nazwy pliku

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
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

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ł

konto usunięte

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.

konto usunięte

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:

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();
}
Jakub Wojt edytował(a) ten post dnia 23.01.12 o godzinie 10:47
Tomasz Szymański

Tomasz Szymański Lead Java Developer,
Bravura Solutions

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.

Mariusz P. Specjalista ds.
Rozwoju

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

Tomasz Szymański Lead Java Developer,
Bravura Solutions

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

Adam Woźniak software architect
and developer

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.

Mariusz P. Specjalista ds.
Rozwoju

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

konto usunięte

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.

Mariusz P. Specjalista ds.
Rozwoju

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

Adam Woźniak software architect
and developer

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.

Mariusz P. Specjalista ds.
Rozwoju

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

Adam Woźniak software architect
and developer

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.

Mariusz P. Specjalista ds.
Rozwoju

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

Kamil Mikołajczyk programista Java /
Grails

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

Następna dyskusja:

Czytanie z pliku ==&gt; dzi...




Wyślij zaproszenie do