2017-02-14 20 views
-1

У меня есть проблема с этимвернуться несколько строк в текстовом файле программирования C

уходящую в позиции курсора на несколько линий

Я проверил FSEEK (Fp, -127, -4 // назад четыре строки) - но это не сработало, не могли бы вы мне помочь.

+2

Можете ли вы показать свой код и объяснить, что именно не сработало? – Marievi

+0

'fseek' влияет только на представление библиотеки о том, где он думает, что следующее местоположение файла для чтения/записи есть. Это не повлияет на вывод, который уже находится на экране. Вы можете распечатать '' \ b'', чтобы удалить уже написанные символы, но когда вы читаете начало строки, нет никакой гарантии, что она будет продолжать стирать символы в предыдущей строке. Чтобы делать то, что вы хотите, вам нужны возможности, превышающие возможности стандартной библиотеки (например, вы можете посмотреть на использование 'curses'). –

ответ

3

Прежде всего, вы, кажется, не передаете правильные аргументы fseek (точнее, последний аргумент). Во-вторых, строки в текстовых файлах редко имеют фиксированную ширину, поэтому вы не можете использовать определенный номер для возврата «четырех строк».

Вместо этого вам нужно искать назад один символ за раз, чтобы найти правильное место. Это не очень эффективно, используя искать функции, и в зависимости от файла вы можете либо

  1. Читать все в буфер памяти, где легко «искать»
  2. В качестве альтернативы выше, память отобразить весь файл
  3. хранятся позиции всех начал линий, так что вы можете легко прыгать вокруг
0

так fseek не может вернуться назад на одну или две линии? Не могли бы вы дать мне простой пример

fp= fopen("liste.txt", "r"); // this is where i have list of names and ages and and ... 
new_fp=fopen("sec_list.txt","w");// this is where i will stock new infos 
    do { 
     fgets(ligne, 100, fp); 
     if (strcmp(tel, ligne)!=0) // if "Tel" isnt the same content as "Ligne" 
      {                                  
       fputs(ligne, new_adherent); 
    }   
    else { 
printf("\n the adherent is founded \n"); 
fseek (fp, -124, -4);// back by 124 caractere and 4 lines or something like that 

    do{ 
     ch = fgetc(fp); 
     if(ch == '\n'){ 
     lines++; 
} 
}while (lines<7); 

printf("\n\t DELETED \n"); 
} 


    }while(!feof(fp)); 

    fclose(fp); 
    fclose(new_fp); 
    remove("liste.txt"); 
    rename("new_liste.txt", "liste.txt"); 
+1

Добро пожаловать в переполнение стека. Макет кода ужасен - исправьте. Будьте осторожны при использовании 'feof()' - здесь используется код в 'do ... while (! Feof (fp)); цикл, который может быть правильным, но обычно его вообще не нужно использовать. Что еще более важно, что означает '-4'? Это 100% не кошерный. –