Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставить текст в файл после указаной строки, неполучается... 
:(
    Опции темы
iPlay
Дата 27.12.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Нужно после указаной строки в файле вставить текст (впринципе тоже строку). Пробую вот так но не получается smile 
Код

int main()
{    
    char string[1000];
    int line_number = 0;
    char string_temp[] = "bla bla bla ";
    printf("Enter line number\n");
    scanf("%d",&line_number);
    const char FileName[]="C:\\in.txt";
    int count_line = 0;
    FILE* file = fopen(FileName,"r+");
    
    while ( !feof(file) ){
      if ( fgets(string,1000,file) ) count_line++;
      if ( count_line == line_number ) break; 
    }
    fputs(string_temp,file);
    Sleep(2000);
    return 0;
}

PM MAIL   Вверх
bsa
Дата 27.12.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



iPlay, просто вставить строку в файл нельзя. Можно только переписывая начиная с места вставки весь файл или создавая новый.
PM   Вверх
iPlay
Дата 27.12.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



А как бы мне так сделать чтобы переписать начиная с места вставки. У меня проблема с тем что я немогу туда написать с нужной позиции..
PM MAIL   Вверх
bsa
Дата 27.12.2007, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



fseek тебе поможет
PM   Вверх
iPlay
Дата 27.12.2007, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Не пойму куда его и как тут прикрутить. Покажи как.
PM MAIL   Вверх
bsa
Дата 27.12.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Перед чтением очередной строки с помощью ftell узнаешь текущее положение в файле. Как только ты нашел нужную строку читаешь все остальные в некий буфер (убедись, что его достаточно). затем функцией fseek смещает позицию в файле на запомненую и записываешь нужную строку, затем записываешь сохраненные строки.
PM   Вверх
iPlay
Дата 27.12.2007, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Слуш можеш пожалуйста кодом в моей проге показать а то чето у меня не получается а завтра уже сдавать надо. Пож.

Добавлено через 1 минуту и 17 секунд
Еще и ужасный насморк  smile  нос чешится пипец аж думать не хочется ...
PM MAIL   Вверх
bsa
Дата 27.12.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
int main()
{    
    char string[1000];
    int line_number = 0;
    char string_temp[] = "bla bla bla ";
    long filesize;
    long linepos = -1;
    printf("Enter line number\n");
    scanf("%d",&line_number);
    const char FileName[]="C:\\in.txt";
    int count_line = 0;
    FILE* file = fopen(FileName,"r+");
    fseek(file, 0, SEEK_END);
    filesize = ftell(file);
    rewind(file);
    while ( !feof(file) ){
      if ( fgets(string,1000,file) )
          ++count_line;
      if ( count_line == line_number ) {
          pos = ftell(file);
          break;
      }
    }
    char *buf = (char*)malloc(filesize - pos + 1);
    filesize = fread(buf, filesize - pos + 1, 1, file);
    fseek(file, pos, SEEK_SET);
    fputs(string_temp,file);
    fwrite(buf, filesize, 1, file);
    free(buf);
    Sleep(2000);
    return 0;
}
Примерно так.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.