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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
#1

Переход на заданную строку - C++

24.07.2012, 20:14. Просмотров 885. Ответов 11
Метки нет (Все метки)

вот хочу считать последнюю строку из файла такием раком
C++
1
2
3
4
5
6
7
8
9
10
11
    fstream str("base.txt",ios_base::in|ios_base::out);
 
    str.seekp(0, ios::end);   
    
    char* words[10];
    str >> words[0];
    str >> words[1];
    str >> words[2];
    cout << words[0];
    cout << words[1];
    cout << words[2];
но не судьба не получается (наверно потому что курсор в самом конце)
так вот как мне считать последнюю строку?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2012, 20:14     Переход на заданную строку
Посмотрите здесь:

C++ Функция поиска вхождения строки в заданную строку в С
C++ Работа с файлами: получить заданную строку
C++ Заменить заданную строку матрицы а на вектор b
C++ Определить количество вхождений подстроки в заданную строку
Удалить заданную строку и столбец матрицы со сдвигом C++
C++ Заданную строку перевести в массив из слов
Строки. Уменьшить заданную строку на К символов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6547 / 3967 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.07.2012, 20:27     Переход на заданную строку #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <fstream>
#include <string>
 
int main()
{
    std::ifstream file("input.txt");    
    std::string str;
 
    while (std::getline(file, str))
        ;
 
    std::cout << str;
 
}
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,903
Записей в блоге: 17
24.07.2012, 20:27     Переход на заданную строку #3
Цитата Сообщение от НубаС++ Посмотреть сообщение
так вот как мне считать последнюю строку?
Никак, нужно для начала прочитать весь файл полностью.
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
24.07.2012, 20:58  [ТС]     Переход на заданную строку #4
Вашим способом не получается почему то, тоесть получается, он выводит на экран последнюю строку НО почему то затем уже программа начинает косячить, те не записывает в файл
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,903
Записей в блоге: 17
24.07.2012, 21:06     Переход на заданную строку #5
Так ты разберись сначала что тебе надо записывать или читать файл?
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
24.07.2012, 21:17  [ТС]     Переход на заданную строку #6
и то и то у меня ios_base::in|ios_base::out
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,903
Записей в блоге: 17
24.07.2012, 21:30     Переход на заданную строку #7
И то и то не канает.

Т.е канает но не без костылей в плане перемещния курсоров.

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

Конкретно опиши что нужно- тогда легче будет объяснить.
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
24.07.2012, 21:41  [ТС]     Переход на заданную строку #8
Оk. Вот алгоритм:
Открываем файл
Считываем последнюю строку
Выводим ее на экран
Дописываем новыую строку (в конец)

Все.

Вот мои соображение по этому поводу, но они не работают
P.S. Работает или одно или другое. (Взависимости от того, что в коде стоит первее)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fstream str;
    
   
   str.open("base.txt",ios_base::in|ios_base::out);   
    int a = ios::end;
    str.seekp(0, ios::end);   
    str.seekp(a - 1);
    std::string stroka;
    while (std::getline(str, stroka));
    std::cout << stroka;
    str.close();
    
    str.open ("base.txt", ios_base::in|ios_base::out);
    str.seekp(0, ios::end);   
            char dateStr [9];
            _strdate( dateStr);
   str << endl << dateStr << " - " << pokaz;
   str.close();
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,903
Записей в блоге: 17
24.07.2012, 21:56     Переход на заданную строку #9
1. Открываем файл для чтения
2. Читаем указанным способом строку.
3. Закрываем файл и открываем заного, но только для "записи в конец", дописываем строку
4. Закрываем файл.

seekp- не юзаем так как он для бинарных файов.
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
24.07.2012, 21:57  [ТС]     Переход на заданную строку #10
все решилось одной строкой str.clear();
но + дал за поптытку помочь, я это очень ценю
ах да. проблема решена
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,903
Записей в блоге: 17
24.07.2012, 22:09     Переход на заданную строку #11
C++
1
 str.clear();
Это говорит о том что с потоком что то-не то то есть была ошибка.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
#include <string>
 
int main()
{
    std::fstream file;    
    std::string str;
    std::string newstr;
    fstream file("base.txt",ios_base::in);
    if(file) 
      {
        while (std::getline(file, str) ) ;
        file.close();
        file.open("base.txt",ios_base::out|ios_base::app);
        file<<newstr;
        file.close();
      } 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2012, 10:26     Переход на заданную строку
Еще ссылки по теме:

C++ Прочитать из файла заданную строку
C++ Функция: замена подстроки в строке на заданную строку
Как передать заданную строку матрицы в функцию? C++
Найти количество вхождений каждой буквы в заданную строку C++
C++ Разрядить пробелами заданную строку

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

Или воспользуйтесь поиском по форуму:
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
25.07.2012, 10:26  [ТС]     Переход на заданную строку #12
спасибо
Yandex
Объявления
25.07.2012, 10:26     Переход на заданную строку
Ответ Создать тему
Опции темы

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