Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 27.05.2011, 23:51   #1
dykatob
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 38
Репутация: 10
Радость УДаление строки из файла методом создания временного файла.

Задача моя на вид очень простая, я хочу удалить введенную с консоли строку из файла( путь которого я так же задаю сам), моя идею заключается в следующем...
1. Открываешь фаил 1 на чтение.
2. Открываешь фаил 2 на запись.
3. В цикле переписать строки фаила 1 в фаил 2.
- если встретилась заданая строка, то не делать добавление в фаил 2.
4. Закрываю фаилы.
5. Заменяю фаил 1 файлом 2. или удаляю 1-ый и переименовываю 2-ой как 1-ый)
Правильный ли ход мыслей? если нет, то в чем загвоздка.
и хочу поподробней разобраться с тем как сразу из одного файла информацию заносить в другой ( пункт 3)
читал Керниган и Ритчи, что-то толком не нашел хорошего примера.. (
Жду ответа)
dykatob вне форума   Ответить с цитированием
Старый 28.05.2011, 00:09   #2
CodeNOT
Участник клуба
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
Репутация: 188
По умолчанию

если количество строк в файле не такое большое, я бы их записал в массив, после чего удалил заданную, и перезаписал бы в этот же файл!
CodeNOT вне форума   Ответить с цитированием
Старый 28.05.2011, 00:14   #3
dykatob
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 38
Репутация: 10
По умолчанию

я пробовал так делать.... очень сложно выходит... ведь файл приходится разделять на строки и заносить построчно в динамический массив)
и там пиздец получается щас скину..
Код:

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAX_STR 1000
#define MAX_CHAR 255
int main()
{
int dlstr=0,j=0,dl1=0,i=0,k=0;
FILE *f1;
char putb[MAX_CHAR],stroka[MAX_STR];
char c;
printf("BBedute puTb FaiLa, koTopbIu Hado otkPbItb\n");
scanf("%s",putb);
printf("BBdedute stroky, kotoreyu Hado ydalutb iz faila:\n");
scanf("%s",stroka);

if ((f1=fopen(putb,"r")) != NULL)
 {
  fseek(f1,0,SEEK_END);
  dl1 = ftell(f1);
  fseek(f1,0,SEEK_SET);

  for (i=0;i<dl1;i++)
  if((c=fgetc(f1))=='\n')
  k++;
    int *estr = new int[k];
    for(i=0;i<k;i++)
    estr[i]=0;
  j=0;
  for (i=0;i<dl1;i++)
  if((c=fgetc(f1))!='\n')
  estr[j]++;
  else
  j++;
    dlstr=strlen(stroka);

    int **mf=new int *[k];
    for (i=0;i<estr[i];i++)
    mf[i]= new int [estr[i]];
  fseek(f1,0,SEEK_SET);
  for (i=0;i<k;i++)
   for (j=0;j<estr[j];j++)
    mf[i][j]=fgetc(f1);
  fclose(f1);
  f1=fopen(putb,"w");
  for (j=0;j<k;j++)
   if (estr[j]==dlstr)
     for (i=0;i<dlstr;i++)
      if((c=fgetc(f1))==stroka[i]) c=0;
      else for(i=0;i<dlstr;i++)
	   fputc(mf[j][i],f1);
   else {  for(i=0;i<dlstr;i++)
	   fputc(mf[j][i],f1);  }
  fclose(f1);}
else
 printf("error");

  printf(" D/I9 3aBePIIIEHu9 pa6otbI PRorRaMMbI Ha)I(MuTe /I|-06y|-0 K/IaBuIIIy " );
  getch();
  return 0;
}

Оформляйте свой код тегом [code]

Последний раз редактировалось ACE Valery; 28.05.2011 в 12:13.
dykatob вне форума   Ответить с цитированием
Старый 28.05.2011, 01:46   #4
pproger
C++ hater
СуперМодератор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,300
Репутация: 1393

skype: vvviperrr00
По умолчанию

Код:

#include <iostream>
#include <iterator>
#include <algorithm>
#include <fstream>
#include <string>
#include <memory>

using namespace std;

struct Line {
    string lineData;
    operator std::string() const { return lineData; }
};

istream &operator>>(istream &str, Line &data)
{
    getline(str, data.lineData);
    return str;
}

int main()
{
    remove_copy_if(
        istream_iterator<Line>(*auto_ptr<fstream>(new fstream("./text", ios::in))),
        istream_iterator<Line>(),
        ostream_iterator<string>(*auto_ptr<fstream>(new fstream("./new_text", ios::out)), "\n"),
        bind2nd(equal_to<string>(), *istream_iterator<Line>(cin))
    );
    return 0;
}

запускаешь, вводишь строку. читает из файла text, пишет в файл new_text пропуская те строчки, которые равны твоей. удалишь и переименуешь файл как нить сам
pproger вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строки из файла Flippp Общие вопросы C/C++ 10 12.11.2009 20:36
Удаление строки из файла. Arhe Общие вопросы .NET 4 03.11.2009 13:12
Удаление строки из файла Македонский Общие вопросы Delphi 5 29.08.2007 15:40


08:08.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru