Problem z wykrywaniem znaku końca linii ('\n') w pliku
Ostatnio zmodyfikowano 2010-08-16 12:57
ricardo83 Temat założony przez niniejszego użytkownika |
Problem z wykrywaniem znaku końca linii ('\n') w pliku » 2010-08-14 23:43:03 Witam Zadaje kolejne pytanie gdyz glowie sie nad tym dobre kilka dni i nie potrafie sobie z tym poradzic :(. A mianowicie chce zaczytac sobie do tablicy (na razie niech to bedzie tablica typu char) cyfry z pliku. Co to sa za liczby narazie nie ma wiekszego znaczenia (przynajmniej tak mi sie wydaje). Pierwszy plik, ktory chcialbym sobie zaladowac ma okolo 700 kB i pokazuje poprawnie znaki konca wiersza(10,126,254 itd...) \\n. Pozniej stworzylem sobie drugi plik, ktory sklada sie z poczatku (powiedzmy 10 pierwszych linijek) tego pierwszego pliku (po prostu zrobilem kopiuj-wklej) i okazuje sie ze znak konca wiersza znajduje sie w innych pozycjach(15,131,260 itd...) a wg mnie znaki w obydwu przypadkach powinny byc na tych samych pozycjach :( Prezentuje kod ktorego uzywam do ladowania danych: #include <iostream> #include <cstdlib> #include <fstream>
using namespace std;
int main() { char bufor[ 13000 ]; int i = 0, w = 0, arona; int koniecznaku = 0; int pozycja[ 10 ]; fstream plik; streampos tellg(); plik.open( "satimage.txt", ios::in ); if( plik.good() ) { cout << "Udalo sie zaladowac plik :)\n"; while( i < 13000 ) { bufor[ i ] = plik.get(); if( bufor[ i ] == '\n' ) { cout << "Koniec znaku:" << plik.tellg() << endl; koniecznaku++; } i++; } cout << "Znakow konca znaku mamy:" << koniecznaku << endl; } else { cout << "ERROR\n"; } return 0; }
Moze ktos wie gdzie tkwi problem jak cos moge wrzucic te pliki na jakis serwer bo samo wkopiowanie tutaj zawartoci moze nic nie dac:( Pozdrawiam |
|
DejaVu |
» 2010-08-15 03:22:34 W jednym pliku koniec wiersza oznaczony masz jako \r\n, a w drugim \n. To może być jakiś sensowny powód. Niemniej jednak nie za bardzo rozumiem co chcesz zrobić, jak jest zaformatowany plik z danymi itd., a w związku z tym zapewne niewiele osób będzie w stanie Ci udzielić jakiejkolwiek odpowiedzi.
|
|
ricardo83 Temat założony przez niniejszego użytkownika |
» 2010-08-15 08:31:50 hmm jak mozesz to sprobuj wkleic te zawartosc do pliku tekstowego: 7 36 6435 3 78 92 101 80 78 92 97 76 78 92 101 76 80 98 98 76 80 94 98 76 80 94 102 79 84 99 108 81 84 99 108 81 80 95 100 81 3 88 111 115 87 88 111 115 87 88 111 115 87 88 112 118 88 88 107 113 85 88 107 113 88 93 111 118 92 88 111 118 92 88 107 113 92 5 52 49 56 33 52 49 66 44 52 56 69 55 52 51 62 42 49 48 68 49 49 54 68 53 50 46 63 44 50 49 67 51 50 53 74 58 5 57 60 74 58 57 53 67 51 57 56 70 48 57 55 78 65 57 55 67 54 53 49 64 50 56 54 79 63 56 54 79 63 56 51 67 52 7 68 73 82 65 72 77 82 68 76 81 90 76 71 79 87 70 71 79 87 70 71 83 87 70 75 83 89 71 71 79 85 67 71 75 85 67 3 80 94 98 76 80 102 102 79 76 102 102 79 76 99 104 81 76 99 108 85 76 103 118 88 84 103 104 79 79 107 109 87 79 107 109 87 funkcja tellg przynajmniej u mnie mowi ze pierwszy znak konca znaku znajduje sie na 15 pozycji a wg mnie powinnien byc na 10 pozycji. Moze te informacje bardziej podswietla obraz problemu.
a czy uzywany edytor tekstowy do ktorego zostala wklejana zawartosc moze jakos inaczej formatowac znaki? pytam gdyz blad pojawia sie jak wklejam zawartosc do Notepad2, kompilatorze Code::Blocks 10.05 na Windowsie XP i mam taki oto wydruk na konsoli Udalo sie zaladowac plik :) Koniec znaku:15 Koniec znaku:131. Natomiast wkleilem zawartosc do edytora gedit, kompilatorze Code::Blocks 8.02 na Ubuntu 10.04 i pokazuje poprawnie koniec znaku Udalo sie zaladowac plik :) Koniec znaku:10 Koniec znaku:126. Bardzo to dziwne.
Pozdrawiam i dziekuje za zainteresowanie tematem |
|
VND |
» 2010-08-15 14:41:11 Otwórz plik w jakimś hexedytorze to zobaczysz jak masz zapisany znak końca linii. Na Win (notatnik) to zwykle \r\n (0x0D 0x0A) czyli dwa znaki. tellg je liczy dlatego odejmij 2 i masz pozycję. Poza tym otwórz plik w trybie binarnym ios::binary |
|
ricardo83 Temat założony przez niniejszego użytkownika |
» 2010-08-16 12:57:39 dziala prawidlowo z tym wlasnie zapisem ios::binary.
dziekuje za pomoc i pozdrawiam |
|
« 1 » |