Monika90 |
» 2015-01-05 00:26:09 |
|
Krump Temat założony przez niniejszego użytkownika |
» 2015-01-05 00:35:19 Monika, to już widziałem, ale nie chciałby tak głęboko korzystać z windowsowych rozwiązań, gdyż ten program może być potrzebny z czasem na serwery które stoją pod linuksem.
SocrateZ, a da rade pobierać getline do char zmieniać to za pomocą tego co mi podsunąłeś i potem to wpisywać do stringa? Chodzi o to, że używam funkcji stringa (.erase .substr itp.) i teraz zmiana składników, niszczy cały mój algorytm. Nie ruszyło by to w ogóle mojego algorytmu, tylko dodało by parę linijek więcej, plus moja funkcje pol() zastępuje twoją z ASCII. Tylko szczerze nie do końca wiem jak to napisać. Zawsze char omijałem i ożywałem stringa, niezbyt lubię go i znam go tylko z teorii ;/ |
|
SocrateZ |
» 2015-01-05 00:47:14 Jeżeli się nie mylę, to w Linuksie UTF-8 po prostu działa. |
Potwierdzam. Właśnie to sprawdziłem. Tylko że te funkcje windowsowskie do niczego się nie przydadzą. Dobra... pętle musisz przerobić na coś takiego: const char * strtab = str.c_str(); int length = str.length(); int z = 0;
while( x < length ) { resnum = 0; y = get_char_bytes(( unsigned char ) strtab[ x ] ); z = 0; sign = strtab[ x ]; while( ++z < y ) { resnum |= sign << 8 * y; printf( "%d ", sign ); sign = strtab[ x + z ]; } printf( "%d ", sign ); resnum |= sign; printf( "%d (0x%X)\n", resnum, resnum ); add_utf8_to_ansi_string( resnum, nfname, & x, 256 ); } Gdzie str to zmienna z nazwą pliku w formacie string. Znaki końcowe zostaną w tablicy nfname. Linuks to olewa i niezależnie od tego czy będzie formatowanie czy nie zmieni nazwę pliku na taką jaka ma być. |
|
Krump Temat założony przez niniejszego użytkownika |
» 2015-01-05 01:00:40 Własnie je przejrzałem na wpół spiąć i tez nie widzę zastosowania, najbardziej twoje mi pomoze, ale jak pisąłem wyzej, jeszcze nie to, bo mi szarga cały kod. Jak sadzisz o moim pomyśle, jest realny? I jak go dobrze zaimplementować. Chodzi mi najbardziej o getline() do charów i potem chary do stringów, bo przesiew ASCII i podmiana to moja funkcja pol() ze zmianami.
A i jeszcze jedno! Tablica char musi być nieograniczona (stringi maja to domyślnie), bo w jednej linijce są dwie ścieżki (które rozdzielam po to mi .erase .substr itp) plus nowe windowsy nie maja ograniczenia ścieżek do 256 znaków. |
|
SocrateZ |
» 2015-01-05 01:02:09 Tablicę zawsze możesz zwiększyć nawet do 4096 Tylko nie zapomnij zmienić wartości limit w funkcji add_utf8_to_ansi_string.
Rozwiązanie które przedstawiłem jest zrobione "na siłę". Problem można rozwiązać na pewno inaczej. Niestety w tym momencie nic sensownego do głowy mi nie przychodzi.
Poprzednie teorie z wchar_t okazały się błędne. Wiem bo sprawdzałem.
PS: Co do tablicy końcowej, nie musisz mieć jej w stringu. Funkcja rename i tak przyjmuje tablicę znaków char. |
|
Krump Temat założony przez niniejszego użytkownika |
» 2015-01-05 07:24:57 Ale piszę, że na własnościach stringa opiera się cały mój algorytm przetwarzania danych, który nie należy do najprostszych, dlatego musi zostać. Coś z tym pokombinuje, chociaż liczyłbym na inną metodę, bardziej "nie na siłę". |
|
SocrateZ |
» 2015-01-05 12:19:42 W linuksie nic nie musisz robić (nie ważne co zrobisz i tak wyjdzie dobrze). Co do windowsa, wszystko co potrzebujesz zostało już w tym wątku pokazane. |
|
Krump Temat założony przez niniejszego użytkownika |
» 2015-01-05 13:50:08 Tak, ale napisałeś, że to metoda na siłę trochę. Może jest prostszy lepszy sposób, bardziej zoptymalizowany, chciałbym, aby się wypowiedział ktoś inny kto robi w C++, chciałbym poznać parę metod. Poza tym to będzie trochę ciężko napisać. |
|
1 2 « 3 » 4 5 |