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

Удаление последних строк. - C++

Восстановить пароль Регистрация
 
Fitz
7 / 7 / 0
Регистрация: 09.10.2011
Сообщений: 38
10.10.2011, 23:16     Удаление последних строк. #1
Есть файл, содержащий неизвестное количество строк. как удалить 3 последние из них?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
}{NiM
 Аватар для }{NiM
64 / 64 / 2
Регистрация: 25.11.2009
Сообщений: 283
10.10.2011, 23:20     Удаление последних строк. #2
будет два прохода по файлу. - первым считаешь количество строк - (пусть будет отвечать за это переменная count)
вторым - создаешь дополнительный файл и копируешь в него все строки первого до count-3 и все.
Fitz
7 / 7 / 0
Регистрация: 09.10.2011
Сообщений: 38
10.10.2011, 23:23  [ТС]     Удаление последних строк. #3
1. Как можно посчитать количество строк?
2. А без 2го файла нельзя?
}{NiM
 Аватар для }{NiM
64 / 64 / 2
Регистрация: 25.11.2009
Сообщений: 283
10.10.2011, 23:26     Удаление последних строк. #4
Без второго можно, тогда надо будет копировать при первом проходе строки в программу, а это по памяти не есть зер гуд.
подсчитать количество строк по символам "\n" в конце строчек
Fitz
7 / 7 / 0
Регистрация: 09.10.2011
Сообщений: 38
10.10.2011, 23:31  [ТС]     Удаление последних строк. #5
Спс, уже проясняется ситуация в голове) а примеров нет? я гуглю, но толку 0... =(
}{NiM
 Аватар для }{NiM
64 / 64 / 2
Регистрация: 25.11.2009
Сообщений: 283
10.10.2011, 23:49     Удаление последних строк. #6
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
// Файл t1.cc
#include <stdio.h>
#include <conio.h>
 
 
using namespace std;
int main()
{
    FILE *t = NULL;
    t = fopen("путь\\1.txt","rt");
    char c;
    int count(0);
    
    while (!feof(t))
    {
    fscanf(t,"%c",&c);
    if(c == '\n') count++;
 
    }
    printf("%i",count);
    fclose(t);
    FILE *wr = fopen("путь\\2.txt","wt");
    t = fopen("путь\\1.txt","rt");
    count-=2;
    while (count>0)
    {
        fscanf(t,"%c",&c);
        fprintf(wr,"%c",c);
        if (c=='\n') count--;
    }
    fclose(wr)  ;
    fclose(t);
    getch();
    return 0;
 
}
Добавлено через 1 минуту
вот так вот примерно это все решается. можно и оптимизировать, я думаю, если посидеть)
Fitz
7 / 7 / 0
Регистрация: 09.10.2011
Сообщений: 38
10.10.2011, 23:54  [ТС]     Удаление последних строк. #7
Цитата Сообщение от }{NiM Посмотреть сообщение
count-=2;

что это?
}{NiM
 Аватар для }{NiM
64 / 64 / 2
Регистрация: 25.11.2009
Сообщений: 283
10.10.2011, 23:56     Удаление последних строк. #8
так как на три строки меньше записать необходимо.

Добавлено через 50 секунд
причем первая строка считается от нуля вначале. а при записи выход при count == 0, значит, одна строка сама теряется. остается отнять еще две строки

Добавлено через 57 секунд
можно написать
C++
1
2
count-=3;
while (count>=0)
Fitz
7 / 7 / 0
Регистрация: 09.10.2011
Сообщений: 38
10.10.2011, 23:59  [ТС]     Удаление последних строк. #9
FILE *t = NULL; а что означает "NULL"?
}{NiM
 Аватар для }{NiM
64 / 64 / 2
Регистрация: 25.11.2009
Сообщений: 283
11.10.2011, 00:01     Удаление последних строк. #10
указатель изначально никуда не указывает == NULL. можно, в принципе не писать. просто привилось со временем
Fitz
7 / 7 / 0
Регистрация: 09.10.2011
Сообщений: 38
11.10.2011, 00:14  [ТС]     Удаление последних строк. #11
Спсибо, большое!

Добавлено через 12 минут
А еще такой вопрос. Перевести текст в число. Это как и зачем?) что то типа strtoint
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
11.10.2011, 00:36     Удаление последних строк. #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int str_to_int(const char* str) {
   int num = 0, cnt = 1, len = 0;
   while(*str++)
        len++;
   for(--str; len > 0; num += (*(--str)-'0')*cnt, cnt*=10,len--);
   return num;
}
 
int main(void) {
   printf("%d\n", str_to_int("3"));
   printf("%d\n", str_to_int("75"));
   printf("%d\n", str_to_int("3209"));
   getchar();
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2011, 02:37     Удаление последних строк.
Еще ссылки по теме:

Чтение последних 10 строк C++
Текстовые файлы. Удаление последних элеметов C++
Распечатать n последних введенных строк C++

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

Или воспользуйтесь поиском по форуму:
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.10.2011, 02:37     Удаление последних строк. #13
Цитата Сообщение от Fitz
Перевести текст в число.
atoi(), atof()
sscanf()
Yandex
Объявления
12.10.2011, 02:37     Удаление последних строк.
Ответ Создать тему
Опции темы

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