powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
10 сообщений из 35, страница 2 из 2
Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
    #38699869
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov 5. Не проверялась компилируемость

Так это вы про свой код! Я тут его пытался запустить
...
Рейтинг: 0 / 0
Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
    #38700812
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryА где в данном коде работа с символами ?В getc/putc.
Некорректными они будут только на кодировках со встроенными нулями (UTF-16/UTF-32) - всё остальное пережуёт побайтово.
...
Рейтинг: 0 / 0
Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
    #38701483
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovSashaMercuryА где в данном коде работа с символами ?В getc/putc.
Некорректными они будут только на кодировках со встроенными нулями (UTF-16/UTF-32) - всё остальное пережуёт побайтово.

Ну у меня при работе с файлом и вывод текста на консоль были проблемы. Потому пришлось работать с локалью.

Но всё равно надо делать какой-нибудь фильтр. А вдруг у меня в файле идут английские, русский, китайские буквы разом. Получается, по-хорошему, надо 1-определить в какой кодировке каждая буква, 2 - установить локаль в эту кодировку, 3- вывести эту букву на поток вывод, и снова к шагу 1. Я правильно понимаю ?
...
Рейтинг: 0 / 0
Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
    #38701496
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот тут почему-то не происходит запись в файл ( Подскажите в чём дело пожалуйста. Не нашёл в сети ни одного нормального примера по замене прописных букв в строчные. Судя по работе этой функции, такое чувство что файл просто не сохраняется.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
int all_to_lowercase(char* file_location)
{
	FILE* f = fopen(file_location,"r+");
	if (f == NULL)
	{
		printf("Unable to open file \n");
		return -1;
	}
	int count = 0;
	int c;
	while (EOF != (c = getc(f)))
	{
		//isupper(c) ? ++count, putc('/b', f), putc(tolower(c), f),printf("%i",count) : false;
		if (isupper(c))
		{
			count++;
			printf("%i", count);
			putc(tolower(c), f);
		}
	}
	fclose(f);
	return count;
}
...
Рейтинг: 0 / 0
Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
    #38701499
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже час разбираюсь, алгоритм элементарный, а как сделать не знаю. Не хочу перенаправлять поток в другой файл, хочу изменить в этом. Или вы в таких случаях перенаправили бы поток в другое место ?
...
Рейтинг: 0 / 0
Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
    #38701672
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
    #38702277
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНо всё равно надо делать какой-нибудь фильтр. А вдруг у меня в файле идут английские, русский, китайские буквы разомРазом они могут оказаться только в юникоде.
Если привыкнуть, что единственный адекватный "транспортный вариант" кодировки юникода - UTF8, то никаких проблем не возникает, т.к. UTF8 - байтовая кодировка, а ваш код работает исключительно с US-ASCII.
...
Рейтинг: 0 / 0
Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
    #38702281
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНе хочу перенаправлять поток в другой файл, хочу изменить в этом. Или вы в таких случаях перенаправили бы поток в другое место ?Нет (универсального) способа менять файл.
Есть, конечно, вариант "всосать в память, модифицировать и записать обратно", но:
1. Требуется много памяти. Иногда - недопустимо много;
2. Сбой в процессе записи приводит к неустранимому повреждению данных.
Каждое из этих соображений убедительно само по себе, но вместе они не оставляют выбора: используйте отдельный файл для записи результата, а работу с записями оставьте специально организованным системам.
...
Рейтинг: 0 / 0
Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
    #38702468
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте C: Всем спасибо за советы.

Basil A. SidorovSashaMercuryНе хочу перенаправлять поток в другой файл, хочу изменить в этом. Или вы в таких случаях перенаправили бы поток в другое место ?Нет (универсального) способа менять файл.
Есть, конечно, вариант "всосать в память, модифицировать и записать обратно", но:
1. Требуется много памяти. Иногда - недопустимо много;
2. Сбой в процессе записи приводит к неустранимому повреждению данных.
Каждое из этих соображений убедительно само по себе, но вместе они не оставляют выбора: используйте отдельный файл для записи результата, а работу с записями оставьте специально организованным системам.


Интересно, пожалуй я согласен. Но только мне казалось что мне необязательно всасывать весь файл в память выделенную для работы программы (думаю понятно что я говорю), думал что можно изменять файл онлайн, как я пробовал выше. С двумя потоками совсем просто, сделал ещё вчера

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
//Все строчные буквы преобразуются к прописным
int all_to_lowercase(const char* file_location_in, const char* file_location_out)
{
	FILE* in = fopen(file_location_in,"r");
	FILE* out = fopen(file_location_out, "r+");
	if (in == NULL || out == NULL)
	{
		printf("Unable to open files \n");
		return -1;
	}
	int count = 0;
	int c;
	while (EOF != (c = getc(in)))
	{
		isupper(c) ? ++count, putc(tolower(c), out) : putc(c,out);
	}
	fclose(in);
	fclose(out);
	return count;
}



А почему не работает этот код ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
while (EOF != (c = getc(f)))
	{
		//isupper(c) ? ++count, putc('/b', f), putc(tolower(c), f),printf("%i",count) : false;
		if (isupper(c))
		{
			count++;
			printf("%i", count);
			putc(tolower(c), f);
		}
	}



Сейчас буду пробовать реализовать задуманное (изменение сразу в файле), всё равно нужно знать, даже если это не очень хорошо, с помощью предложенных функций
...
Рейтинг: 0 / 0
Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
    #38702713
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury
А почему не работает этот код ?



условие if (isupper(c)) тут лишнее.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Можно ли сделать код для сравнения двух файлов быстрее и красивее ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]