Задать вопрос
@khazhinov

Замена UNICODE символов в строке из файла?

Есть html файл, в котором записана простейшая текстовая информация на русском языке.
Нужно пробежаться по файлу и заменить в нём некоторые части слов.
Допустим в файле будет множество слов на "ЖИ/ШИ", но написанные через "ы".
Нужно пройтись пройтись по файлу и во всех нужных нам местах заменить "ы" на "и".
Вот наработка:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>

#define LEN 1000

int main(void)
{
	setlocale(LC_ALL, "Rus");
	puts("'ЖИ' и 'ШИ' ПИШИ С БУКВОЙ 'И'!");

	wchar_t* cArray[LEN];
	wchar_t _check = L"", _checkNext = L"";

	FILE *_initialFile, *_correctedFile; 

	_wfopen_s(&_initialFile, L"initial.html", L"r,ccs=UNICODE");
	_wfopen_s(&_correctedFile, L"corrected.html", L"w,ccs=UNICODE");

	if (_initialFile == NULL)
	{
		puts("Исходный файл пуст!");
		return EXIT_FAILURE;
	}

	while (fgetws(cArray, LEN, _initialFile) != NULL)
	{
		for (int i = 0; i < wcslen(cArray); i++) {
			_check = cArray[i];
			_checkNext = cArray[i + 1];
			if ((_check == L"Ж" && _checkNext == L"ы") || (_check == L"ж" && _checkNext == L"ы") || (_check == L"Ш" && _checkNext == L"ы") || (_check == L"ш" && _checkNext == L"ы")) {
				cArray[i + 1] = L"и";
				i=i+2;
			}
		}
		fwprintf_s(_correctedFile, L"%s", cArray);
	}

	fclose(_correctedFile);
	fclose(_initialFile);
	return EXIT_SUCCESS;
}

Она прекрасно копирует исходный файл в новый, но не заменяет.
Я пытался выводить считанные символы и ставить точки между считанными символами. Пришел к выводу, что символы не считываются из строки совсем.
Как исправить?
  • Вопрос задан
  • 206 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@khazhinov Автор вопроса
Кому интересно, вот решенный вопрос:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>

#define LEN 1000

int main(void)
{
	setlocale(LC_ALL, "Russian");
	wprintf(L"'ЖИ' и 'ШИ' ПИШИ С БУКВОЙ 'И'!\n");

	wchar_t cArray[LEN];
	wchar_t _check = L' ', _checkNext = L' ';

	FILE *_initialFile, *_correctedFile;

	_wfopen_s(&_initialFile, L"initial.html", L"r,ccs=UNICODE");
	_wfopen_s(&_correctedFile, L"corrected.html", L"w,ccs=UNICODE");

	if (_initialFile == NULL)
	{
		wprintf(L"Исходный файл пуст!");
		return EXIT_FAILURE;
	}

	while (fgetws(cArray, LEN, _initialFile) != NULL)
	{
		for (int i = 0; i < wcslen(cArray); i++) {
			_check = cArray[i];
			_checkNext = cArray[i + 1];
			//wprintf(L"%d\n", _check);
			if ((_check == L'Ж' && _checkNext == L'ы') || (_check == L'ж' && _checkNext == L'ы') || (_check == L'Ш' && _checkNext == L'ы') || (_check == L'ш' && _checkNext == L'ы')) {
				cArray[i + 1] = L'и';
				i = i + 2;
			}
		}
		fwprintf_s(_correctedFile, L"%s", cArray);
	}

	fclose(_correctedFile);
	fclose(_initialFile);
	return EXIT_SUCCESS;
}

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы