Форум программистов, компьютерный форум CyberForum.ru

Переписать текстовый файл удалив строчку в которой стоит знак "?" - C++

Восстановить пароль Регистрация
 
Vlad708
4 / 4 / 0
Регистрация: 04.11.2012
Сообщений: 72
10.11.2012, 17:46     Переписать текстовый файл удалив строчку в которой стоит знак "?" #1
Имеется предварительно созданный текстовый файл. Удалить из него строку, в которой стоит вопросительный знак и результат (т.е. все строки кроме этой) записать в другой файл.
C++
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main ()
{
   clrscr();
   int i;
   int a=0;
   int z=0;
   FILE *f=fopen("D:\\tmp\\Zenit.txt","r+");
   FILE *f2=fopen("D:\\tmp\\Tmp.txt","wt");
   while (feof(f)==0)
   {
   char str[1024];
   fgets(str,1024,f);
     for (i=0; i<strlen(str); i++) {
       while (str[i]!='\n') {
     if (str[i]=='?') {
       a=1;
       }
        else {
        if (a==1)
        z++;
        else
        fprintf(f2,"%s",str[i]);
     }
       }
    i++;
    }
    break;
 
   }
  }
   fclose(f);
   fclose(f2);
   getch ();
}
Не могу понять. как сделать так, чтобы если в строчке найден вопрос, то эту строчку не записывать во второй текстовый файл.
Вроде бы цикл проверяет посимвольно. но не пойму что делать если найдена строчка с вопросом((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2012, 17:46     Переписать текстовый файл удалив строчку в которой стоит знак "?"
Посмотрите здесь:

Записать в другой текстовый файл только слова, начинающиеся на букву "a" C++
Строка: заменить первую "о" на "а", удалив остальные "о" C++
Работа с файлами (вывести в текстовый файл "g.txt" любую цифру из исходного файла "f.txt" с сохранением строгого порядка) C++
C++ Дан текстовый файл. Напечатать все его строки, в которых присутствует слово "кот"
Дан текстовый файл f. Переписать текст в файл g, удалив все группы букв s (s передается параметром) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
10.11.2012, 19:04     Переписать текстовый файл удалив строчку в которой стоит знак "?" #2
Можно вот так сделать
C++
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
#include <iostream>
#include <string>
#include <fstream> 
 
int main() 
{   
    int count = 0;
    std::string str;
    std::ifstream infile;
    infile.open("Text.txt"); 
    std::ofstream outfile("ASD.txt");
 
    if(!infile.is_open()) 
        std::cout << "Error " << std::endl; 
    else  
        while(getline(infile, str)) 
        {  
            for (unsigned i = 0; i < str.size(); i++) 
                if(str[i] == '?') 
                    break; 
                else  
                    count++; 
            if(count ==str.size()) 
                outfile << str << std::endl;
            count = 0;
        }
 
}
Сделано на Visual Studio
Ольга Евчук
 Аватар для Ольга Евчук
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 2
29.05.2015, 22:35     Переписать текстовый файл удалив строчку в которой стоит знак "?" #3
Я писала по другому. Заменяла весь текст между точкой предыдущего предложения и вопросительным знаком данного предложения на знак пробел.
C++
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
/*дан текстовый файл. Удалить из него первую строку, в конце которой стоит 
вопросительный знак. Результат записать в другой файл */
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
 
int main ()
{
    setlocale (LC_ALL,"Russian_Russia.1251");
    FILE *f_initial, *f_new;//файловые переменные для исходного файла,  и для файла, в котором будет записан результат
    int i, j, str_length;//переменные цикла, переменная для хранения длины строки
    char *ptr;
    
    ptr=(char*) calloc (500,sizeof (char));
 
    if ((f_initial=fopen ("D:\initial.txt", "r")) ==NULL)
    {
        printf ("\n\t The first file could not be opened. \n");
        printf ("\n Press any key: ");
        _getch();
        return -2;
    }
    if ((f_new=fopen ("D:\data.txt", "w")) ==NULL)
    {
        printf ("\n\t The second file could not be opened. \n");
        printf ("\n Press any key: ");
        _getch();
        return -2;}
    
    fread(ptr,500,sizeof (char),f_initial);
    str_length=strlen(ptr);//определяем длину строки
    puts (ptr);//выводим исходный текст
 
    for (i=0;i<str_length;i++)
    {
        if (ptr[i]=='?')
        {
            for (j=i;j>0;j--)//пока не знак точки, удаляем все элементы
            {
                if (ptr[j]=='.'){ break;}
                ptr[j]=' ';
            }
        }
    }
    puts (ptr);
    char str_len;
    str_len=strlen(ptr);
    fwrite (ptr,str_len,sizeof(char),f_new);
 
    fclose (f_initial);
    fclose (f_new);
    free (ptr);
    printf ("\n Press any key: ");
    _getch();
    return 0;
}
mymedia
190 / 190 / 48
Регистрация: 27.05.2011
Сообщений: 543
29.05.2015, 23:01     Переписать текстовый файл удалив строчку в которой стоит знак "?" #4
Вот моё решение.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <fstream>
#include <string>
 
int main(int argc, char* argv[]) {
    using namespace std;
    ifstream in(argv[1]);
    ofstream out(argv[2]);
    string str;
    while (in) {
        getline(in, str);
        if (str.find("?") == str.npos) {
            /* строка не содержит знака вопроса */
            out << str;
        }
    }
}
Vlad708, касательно вашего кода: вам нужно во вложенном цикле использовать другую переменную (не i), чтобы бежать по строчке. А запись в файл вынести из тела вложенного цикла. Дело в том, что как только записали символ в файл, вынуть его оттуда проблематично
Yandex
Объявления
29.05.2015, 23:01     Переписать текстовый файл удалив строчку в которой стоит знак "?"
Ответ Создать тему
Опции темы

Текущее время: 18:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru