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

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

Восстановить пароль Регистрация
 
Fyria94
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 23
22.03.2014, 15:39     Удаления нужной строчки из файла #1
Доброе время суток ! Мне понадобилась функция, которая по двум параметрам (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++
C++ С файла считать цифры a и b в каждой строчки и вывести их сумму в другой файл
C++ Односвязные списки. Реализовать функцию для удаления строчки из структуры по заданному номеру
C++ Считывание из файла в нужной кодировке
Ошибка удаления файла C++
Написать программу для удаления ленты в середине текстового файла C++
C++ Как начать чтение файла сначала после Getline с первой строчки в fstream?
C++ Ошибка компиляции после удаления файла в проекте в NetBeans C++
Если функция, подобная getline, которая может читать очень большие строчки из файла? C++
Ввести адрес файла и разобрать его на части(строчки с++) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5284 / 4803 / 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     Удаления нужной строчки из файла
Ответ Создать тему
Опции темы

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