powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите новичку (MFC)
9 сообщений из 9, страница 1 из 1
Помогите новичку (MFC)
    #34752993
V@dim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Помогите пожалуйста написать прогу, которая в текстовом файле ищет конец строки, и ставит там точку. Потом ищет последнюю в строке запятую, стирает после нее все символы, и ставит вместо запятой точку.

Вот пример:

6.00, 7.00, 8.00, 12.00, 17.40 Новини. // в этой строке ничего изменять не нужно
6.10 "Поки всi вдома" // в этой строке нужно поставить точку
7.10, 8.10 "Ранок з Iнтером" // в этой строке нужно поставить точку
9.55, 20.30 Т/с "Тетянин день", 68 с. // сдесь нужно после запятой убрать 68 с., и вместо запятой поставить точку
11.00, 17.55, 19.00 Т/с "Гонка за щастям", 47 с. // сдесь аналогично.

Буду признателен за любую помощь!
Спасибо!
...
Рейтинг: 0 / 0
Помогите новичку (MFC)
    #34752999
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Открыть исходный файл для чтения.
2. Открыть временный файл для записи.
3. Считывать построчно из исходного файла, делать необходимые изменения в строке и писать ее во временный файл.
4. Повторять шаг 3 пока не кончатся строки в исходном файле.
5. Закрыть оба файла.
6. Удалить исходный файл.
7. Переименовать временный в исходный.
...
Рейтинг: 0 / 0
Помогите новичку (MFC)
    #34753003
V@dim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот например до этого дошел. Дальше грухол угол. Т.е. Построчно считать с файла могу, а дальше что делать недогоню.

CStdioFile file, temp;
CString stroka;
file.Open("d:\\as.txt", CFile::modeRead);
temp.Open("d:\\temp.txt", CFile::modeCreate | CFile::modeReadWrite);

while (file.ReadString(stroka)) {

AfxMessageBox(stroka);
temp.WriteString(stroka + "\n");
}

Дальше пробовал использовать CString::Find, но у меня что-то не получилось.
Вот на примере можете показать, как в этой строке найти симлов "," (последний в даной строке), убрать после него все символы, и поставить точку
...
Рейтинг: 0 / 0
Помогите новичку (MFC)
    #34753047
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik wrote:

> 1. Открыть исходный файл для чтения.
> 2. Открыть временный файл для записи.
> 3. Считывать построчно из исходного файла, делать необходимые изменения в
> строке и писать ее во временный файл. 4. Повторять шаг 3 пока не кончатся
> строки в исходном файле. 5. Закрыть оба файла.
> 6. Удалить исходный файл.
> 7. Переименовать временный в исходный.
Можно просто загрузить исходный файл в память, модифицировать его, и
сохранить назад.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогите новичку (MFC)
    #34753059
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V@dimНу вот например до этого дошел. Дальше грухол угол. Т.е. Построчно считать с файла могу, а дальше что делать недогоню.

CStdioFile file, temp;
CString stroka;
file.Open("d:\\as.txt", CFile::modeRead);
temp.Open("d:\\temp.txt", CFile::modeCreate | CFile::modeReadWrite);

while (file.ReadString(stroka)) {

AfxMessageBox(stroka);
temp.WriteString(stroka + "\n");
}

Дальше пробовал использовать CString::Find, но у меня что-то не получилось.
Вот на примере можете показать, как в этой строке найти симлов "," (последний в даной строке), убрать после него все символы, и поставить точку

mfc не знаю(
...
Рейтинг: 0 / 0
Помогите новичку (MFC)
    #34753096
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik wrote:

> mfc не знаю(
Он там и не нужен.
Есть функции по типу fgets можно ими считать файл построчно, потом вывести
назад, добавляя точку.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогите новичку (MFC)
    #34753148
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с расширенными символами работать, естесно, не будет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
void main()
{
	const unsigned cLen =  256 ;
	FILE *fp_src = fopen("src.txt", "r");  // исходный файл
	FILE *fp_tmp = fopen("tmp", "w");

	if (!fp_src || !fp_tmp)
	{
		printf("\nError opening file..");
		return;
	}
	
	char	rd_str[cLen +  2 ];
	char	*p;
	size_t	len;

	while( fgets(rd_str, cLen, fp_src) )
	{
		len = strlen(rd_str);
		p = strrchr(rd_str, ',');	// ищу последнюю запятую
		
		if (p)	
			strcpy(p, ".\n");		// если нашел - заменяю на точку и обрезаю строку
		else // ищу последний читаемый символ (т.к. fgets читает вместе с \n)
		{
			
			p = strpbrk(rd_str, "\r\n");

			if (p)
			{
				if ('.' != *(p -  1 ))
					strcpy(p, ".\n");	// ставлю  точку
			}
			else if ('.' != rd_str[len -  1 ])			// последняя строка в файле может не иметь '\n'
				strcpy(rd_str + len, ".");	// ставлю  точку

		}

		fputs(rd_str, fp_tmp);
	}

	fclose(fp_src);
	fclose(fp_tmp);
	remove("src.txt");
	rename("tmp", "src.txt");
}
...
Рейтинг: 0 / 0
Помогите новичку (MFC)
    #34753153
V@dim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CStdioFile file, temp; // файлы
CString stroka; // считанная строка
int str = 0; // позиция найденого символа
file.Open("d:\\as.txt", CFile::modeRead); // Открытие файла для чтения
temp.Open("d:\\temp.txt", CFile::modeCreate | CFile::modeReadWrite); // создание тмп файла

while (file.ReadString(stroka)) { // считывание строки


str = stroka.ReverseFind(','); // поиск символа с конца строки
if (str > -1) { // Если символ не найден, функция возвращает -1
stroka.Delete(str, 3); // удаление найденного символа, и еще 3 символа после него
stroka.Insert(str, ".\n"); // вставка нового символа
temp.WriteString(stroka); // запись результата в файл
}

}

Вот уже написал такое. По логике должно работать. А на практике хрень получаеться
...
Рейтинг: 0 / 0
Помогите новичку (MFC)
    #34756652
V@dim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня получилось. Может и совсем по-тупому, но уж как могу. (Я с С++ только пару дней знаком). Главное достиг то, чего хотел.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
void search()
{
	CStdioFile file; // Считываемый файл

	CStdioFile temp; // Файл для записи результата

	int i =  0 ; // Номер строки

	file.Open("d:\\as.txt", CFile::modeRead); // Открытие файла

	temp.Open("d:\\temp.txt", CFile::modeCreate | CFile::modeReadWrite);

	CString string;

	int k =  0 ; // Номер найденного символа

	int l =  0 ; // Длина строки

	int m =  0 ; // Разница

	int otvet =  0 ; // 

	while (file.ReadString(string))
	{ 
		i++;

		cout << "Zagryzka " << i << " stroki \n";

		cout << "Obrabotka.... \n";

		k = (string.ReverseFind(','));  // Поиск символа "," с конца строки

		l = (string.GetLength()); // Подсчет длины строки

		m = l - k;	// Вычисление разницы


		if (m >  8 ) {    // Проверка разницы (для строк, в которых нету моего условия, а есть просто запятая. Например. 8.00 Доброе утро, Россия. - эту строку вообще не обрабатывать
			
			otvet =  1 ;
		
		}

		else 
		{
			otvet =  0 ;
		}

		switch (otvet) {
			
			case  0 : 
				
			if (k  > - 1 ) {

			string.Delete(k,  40 ); // Уделение найденного символа

			string.Insert(k, "."); // Вставка нового символа

			temp.WriteString("\n");

			break;

		};

			case  1 : 
				temp.WriteString("\n");

			break;
		

		}


		
		temp.WriteString(string); \\ Запись результата
		

	}

			

}
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите новичку (MFC)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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