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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fyria94
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 23
#1

Удаления нужной строчки из файла - C++

22.03.2014, 15:39. Просмотров 232. Ответов 2
Метки нет (Все метки)

Доброе время суток ! Мне понадобилась функция, которая по двум параметрам (1ый и 2ой символ строчки ) находит нужную строчку и удаляет ее . У меня два варианта как это сделать , они в общем схожи.
1) Перезаписывать все строчки в другой файл , кроме удаляемой , потом переименовать ( я не знаю как переименовывать , но это отдельный вопрос )
2) Что бы файл перезаписывал сам себя , кроме нужной строчки.
В общем , используя 1ый вариант он находит и удаляет нужную строчку если цикл обхода файла стоит "обходить до элемента 0 -( искусственно ставил последним ноль , остальные не нули ) " , но если ставить цикл while(!feof(f)) , он доходит до последнего символа и почему-то еще раз заходит и перезаписывает последнюю строчку. В строчке 5 элементов. Вот например вот так удаляем по первым символам 8 7 :
исходные данные в файле
12345
67893
87234
28737

после перезаписи в другом файле
12345
67893
28737
28777

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
void DelStr( int hand, int num){
 
    int k=1;
    int mas[2];
    int l=0;
    FILE *f;
    FILE *c;
    FILE *g;
    
 
    f = fopen("text.txt", "r+");
    c = fopen("text1.txt", "w");
    //g = fopen("text.txt", "r+");
    
 
    while(!feof(f)){
//Сканируем первые два символа строчки
    fscanf(f,"%1d",&mas[0]);
    fscanf(f,"%1d",&mas[1]);
// Если это та строчка которую нужно удалить, то сканируем до конца строчку ( пропускаем ее )
    if(mas[0]==hand && mas[1]==num){
        //fseek(f,5,1);
    for(int j=0;j<3;j++)
      fscanf(f,"%1d",&k);
    }
//Если нет , то перезаписываем строчку в другой файл 
    else{
    
    fprintf(c,"%1d",mas[0]);
    fprintf(c,"%1d",mas[1]);
 
    for(int j=0;j<3;j++){
    fscanf(f,"%1d",&k);
    fprintf(c,"%1d",k);
    }
    
 
    fprintf(c,"\n");
    }
    
}
 
    fclose(f);
    fclose(c);
}
в общем проблема в обходе файла , потому что если обходить пока не будет сканированный элемент = 0 , и 0 поставить последним , то все работает , но в целом у меня могут нули встречаться и раньше , строго не судите , я только начинаю программировать, как мозги работают так код и пишу. Заранее за ответ спасибо , я просидел больше 9ти часов уже с этой функцией(
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2014, 15:39     Удаления нужной строчки из файла
Посмотрите здесь:

Удаление нужной строчки из файла - C++
Здравствуйте. Подскажите пожалуйста, как удалить нужную строчку из файла? Строчка является ключом. Например: Содержание...

Односвязные списки. Реализовать функцию для удаления строчки из структуры по заданному номеру - C++
Всем привет, не знаю создавалась ли подобная тема (нашел кое что похожее но не помогло) Столкнулся с проблемой, никак не могу сделать...

Считывание из файла в нужной кодировке - C++
Почему при считывание файла выдает кракозябры ? Содержимое файла: char *text; ifstream read; read.open(&quot;read.txt&quot;); ...

добавление строчки в самое начало файла - C++
Как программно добавить строчку в самое начало файла?

Ввести адрес файла и разобрать его на части(строчки с++) - C++
Помогите,пожалуйста,решить следующую задачу. Ввести адресс файла и разобрать его на части розделённые знаком &quot;/&quot;. Каждую часть вывести в...

С файла считать цифры a и b в каждой строчки и вывести их сумму в другой файл - C++
Нужно с файла считать цифры a и b в каждой строчки и вывести их сумму в другой файл. При чем количество таких пар неизвестна. Почему моя...

Как начать чтение файла сначала после Getline с первой строчки в fstream? - C++
Пишу программу,которая читает строки их текстового файла и передаёт их в поле Edit1 поочерёдно,по нажатию кнопки.Когда строки...

Если функция, подобная getline, которая может читать очень большие строчки из файла? - C++
Если функция, подобная getline, которая может читать очень большие строчки из файла?

Ошибка удаления файла - C++
Здравствуйте, у меня такой вопрос: как можно удалить созданный в программе файл txt? То есть: ofstream f(&quot;test.txt&quot;); /* ... */ ...

функцию для удаления файла на жестком диске - C++
Прошу подскажите функцию для удаления файла на жестком диске.

Ошибка компиляции после удаления файла в проекте в NetBeans C++ - C++
После удаления какого либо файла из проекта из окна &quot;файлы&quot; среды NetBeans проект не компилируется. Ниже приведен результат отладки после...

Написать программу для удаления ленты в середине текстового файла - C++
написать программу для удаление ленты в середине текстового файла Добавлено через 39 минут есть программа для удаления строки в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.03.2014, 02:09     Удаления нужной строчки из файла #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Решение сводится к тому, что нужно определить, в каком месте кода будет считываться EOF, и сделать там выход из цикла чтения. Данная проблема возникает из-за того, что EOF считывается в одном месте кода, а проеверка на EOF происходит где-то дальше.

Добавлено через 3 минуты
Вот после этого и нужно делать проверку на EOF:
C++
1
2
3
//Сканируем первые два символа строчки
    fscanf(f,"%1d",&mas[0]);
    fscanf(f,"%1d",&mas[1]);
Fyria94
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 23
23.03.2014, 20:13  [ТС]     Удаления нужной строчки из файла #3
Спасибо большое, разобрался , должен буду)
Yandex
Объявления
23.03.2014, 20:13     Удаления нужной строчки из файла
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru