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

Вот пример:

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

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
26.08.2007, 15:48
    #34753047
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку (MFC)
Tubrik wrote:

> 1. Открыть исходный файл для чтения.
> 2. Открыть временный файл для записи.
> 3. Считывать построчно из исходного файла, делать необходимые изменения в
> строке и писать ее во временный файл. 4. Повторять шаг 3 пока не кончатся
> строки в исходном файле. 5. Закрыть оба файла.
> 6. Удалить исходный файл.
> 7. Переименовать временный в исходный.
Можно просто загрузить исходный файл в память, модифицировать его, и
сохранить назад.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
26.08.2007, 15:56
    #34753059
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку (MFC)
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
26.08.2007, 17:15
    #34753096
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку (MFC)
Tubrik wrote:

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

Код: 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
26.08.2007, 18:25
    #34753153
V@dim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку (MFC)
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
28.08.2007, 03:54
    #34756652
V@dim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку (MFC)
У меня получилось. Может и совсем по-тупому, но уж как могу. (Я с С++ только пару дней знаком). Главное достиг то, чего хотел.

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


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