C++ edycja pliku

0

Witam,
mam taki problem:
mam plik, w którym mam tekst z polskimi znakami. Pisze programik, ktory do pliku w losowych miejscach dopisze losowe znaki. Korzystam z klasy fstream. Problem jest taki, że po dopisaniu znaków do pliku po otworzeniu pliku zamiast polskich znaków mam krzaki.

Z góry dzieki </image>

0

Użyj wfstream

0

nic to nie dało :(

kod:

 fstream plik(argv[1], ios::in | ios::out);

  srand(time(NULL));
   
  if (!plik.good()) 
  {
   	printf ("Błąd otwarcia pliku: %s!\n", argv[1]);
    	return 1;
  }

  plik.seekg(0, ios_base::end);
  streampos length = plik.tellg();

  int count = rand()%(length/100)+10;

  cout << "Dlugosc pliku: " << length << endl;
  cout << "Wstawiono znakow: " << count << endl;	

  for (int i = 0; i < count; i++)
  {
  	int where = rand() % length+1;
        char character = rand() % 126+33;

        cout << "Wstawiono znak: " << character << " na pozycji " << where << endl;
	plik.seekp(where, ios_base::beg);	
	plik << character;
  
  }


  plik.close ();
0

Musisz używać zmiennych, obiektów do przechowywania rozszerzonych znaków. W bibliotece standardowej mają one przedrostek w(wcout, wstring, wfstream), pojedynczy znak to typ wchar_t .

0

@tobix10, nic nie musi. Problem w tym, że ten programik operuje na nieokreślonej stronie kodowej. O ile podstawowy zestaw ascii jest ok (0...126), bo jest zawsze taki sam, to te następne 33 znaki nie wiadomo w jakim kodowaniu mają być.

Można zrobić tak, używając tablicy:

static const char spec_chrs[] = "ĄĆĘŁŃÓŚŹŻąćęłńóśźż";

(...)

char character = rand() % (126 + sizeof(spec_chrs));
if((unsigned)character > 126)
    character = spec_chrs[character % sizeof(spec_chrs)];

1 użytkowników online, w tym zalogowanych: 0, gości: 1