Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Си и работа с текстовым файлом(?)

19K
09 декабря 2006 года
spravochnaia
11 / / 08.12.2006
...снова возникла проблема в реализации с Си...вобщем идея такова - в файле 1.txt есть n-е количество строк, которое я определяю с помощью символа \n, и я пытаюсь вставить кусок текста из другого файла 2.txt(опятьже построчно к примеру с 3 по 5 строку) в строку к примеру с 5-по 7, предварительно затирая всё что было в 5 -7 (т.к. строки из 2.txt могут быть либо больше либо меньше строк которые затираю)...
Попробовав реализовать хотябы запись из массива(который вводится с клавиатуры) в строки 1.txt к примеру с 5-по 7, у меня получилось вот что:
Код:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{  
  char c,in[100];
  long int i=0,a,b,k=0,l=0;
  FILE  *fileinput;
  fileinput = fopen("1.txt", "a+");

  printf("a = ");scanf("%d",&a);
  printf("b = ");scanf("%d",&b);
  printf("in = "); scanf("%s",&in);
  while (in[k]!='\n'){l++;k++;}
  printf("l=%d",l);
 
  while(c!=EOF)
  {
    c=fgetc(fileinput);          
    if(i>b-1) break;
    if(i>=a-1){
    for(k=0;k>=l;k++)          
     fputc(in[k],fileinput);
     break;
    }
    if(c=='\n')i++;            
 
 
  }
  printf("---");
  fclose(fileinput);
 
  system("PAUSE"); 
  return 0;
}

но программа даже и не пытается что-либо писать в файл, хотя режим файла 'a+'.
Большая просьба - посоветуйте как проще реализовать мою идею:\ и в чём моя ошибка...
274
09 декабря 2006 года
Lone Wolf
1.3K / / 26.11.2006
Я бы делал так.
1. Создать временный файл.
2. в него построчно писать все что надо, т.е с 1 по 4 строку из первого файла, дальше нужное из второго, и остаток опять из первого.
3. потом удаляешь первый файл, и переименовуешь временный или перзаписуешь первый полностью содержимым, временного. а его удаляешь.
19K
10 декабря 2006 года
spravochnaia
11 / / 08.12.2006
Цитата: Lone Wolf
Я бы делал так.
1. Создать временный файл.
2. в него построчно писать все что надо, т.е с 1 по 4 строку из первого файла, дальше нужное из второго, и остаток опять из первого.
3. потом удаляешь первый файл, и переименовуешь временный или перзаписуешь первый полностью содержимым, временного. а его удаляешь.



попробовал осуществить, вот что вышло:

Код:
#include <stdio.h>
#include <stdlib.h>

int main()
{  
 char f_inp,in[100];
 long int i=0,j,l=0,n1=0,n2=0, ab[1000],l_ab=0;
 FILE  *fileinput1;
 FILE *fileinput2;
 FILE *filetemp;
 fileinput1 = fopen ("1.txt", "a+"); /* открытие файла 1.txt */
 fileinput2 = fopen ("2.txt","r");   /* открытие файла 2.txt */
 filetemp = fopen ("tmp.txt","w+");  /* открытие файла tmp.txt */
 while(1)
 {
         printf("a[%d] = ",i);scanf("%d",&ab); if(ab==-1) break; /* заполняем массив номерами строк a и b попарно, ab==-1 - конец ввода */
         printf("b[%d] = ",i+1);scanf("%d",&ab[i+1]);i+=2; /* шаг +2, т.к. */
 }
 while(ab[l_ab]!=-1) l_ab++; /* определение длины массива ab[] */
 printf("\nl_ab = %d\n",l_ab);
 /* ab[j+1]-1 и ab[j]-1 т.к. строка считается с 0-й */
 for(j=0;j>=(l_ab-1)/2;j+=4) /* повторение записи в файл (l_ab-1)/2 т.к. -1 не учитывается, делим на 2, т.к. a и b попарно записанны */
 {
          while(f_inp!=EOF)
          {
                  f_inp=fgetc(fileinput1);          
                  if(n1>ab[j+1]-1) break; /* если достигнута b1 строка то выходим из цикла */
                  if(n1>=ab[j]-1) /* если дошли до а1 строки, то */
                  {
                              for(i=0;i>=ab[j+1]-ab[j];i++)     /* запись |b1-a1| строк в файл */
                              {
                                 while(f_inp!='\n')             /* определение конца строки(пока не встретим \n копируем строку в temp.txt) */  
                                 {
                                    fputc(f_inp,filetemp);      /* посимвольная запись строки */                                                                
                                    f_inp=fgetc(fileinput1);    /* получение следующего символа */
                                 }
                                 /* вот тут по идее должен вписываться символ конца строки, но fputc('\n',filetemp) не хочет работать(мб в синтаксисе ошибся) */
                              }
                  }
                  if(f_inp=='\n') n1++; /* определение номера строки */
          }
          while(f_inp!=EOF)
          {
                  if(ab[j+2]==-1) break; /* если  a2 не существует выходим из цикла */
                 
                  f_inp=fgetc(fileinput2);          
                  if(n2>ab[j+3]-1) break; /* если достигнуто b2 то выходим из цикла */
                  if(n2>=ab[j+2]-1) /* если дошли до строки под номером a, то */
                  {
                              for(i=0;i>=ab[j+3]-ab[j+2];i++)  /* запись |b1-a1| строк в файл */
                              {
                                 while(f_inp!='\n')             /* определение конца строки(пока не встретим \n копируем строку в temp.txt) */  
                                 {
                                   fputc(f_inp,filetemp);      /* посимвольная запись строки */                                                                
                                   f_inp=fgetc(fileinput2);    /* получение следующего символа */                                                                
                                 }
                                 /* вот тут по идее должен вписываться символ конца строки, но fputc('\n',filetemp) не хочет работать(мб в синтаксисе ошибся) */
                              }
                  }
                  if(f_inp=='\n') n2++; /* определение номера строки */
          }
 }
  printf("--complit--");
  fclose(fileinput1);fclose(fileinput2);fclose(filetemp); /* закрываем все 3 файла */
 
  system("PAUSE"); 
  return 0;
}

покачто без удаления и переименовывания(кстати как переименовывать файл средствами функций Си или это делается только при помощи только system(); ?), просто берутся номера строк введённые с клавиатуры, программа эти строки должна прочитать из 1.txt поместить в файле tmp.txt, из 2.txt и снова поместить в tmp.txt. Но что-то не так-\ tmp.txt создаётся, но он пуст - копирование не выполняется, прошу указать на ошибку, заранее спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог