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

перенос курсора - C++

Восстановить пароль Регистрация
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
25.06.2013, 13:17     перенос курсора #1
C++
1
2
3
4
5
6
fstream ifile;
string s;
ifile.open(NameFile, :: ios::in);
int cur = ifile.tellp();  
ifile.seekp(cur ,ios::beg); 
ifile >>s;
вот незамысловатый кусочек кода, проблема в том что seekp или tell работает "не совсем правильно " так как например из за переноса в текущую позицию , то- есть перенос по сути не происходит а на деле указатель улетает вперёд байт на 50. что делать?

Добавлено через 10 минут
с маленьким файлом таких проблем нет

Добавлено через 5 минут
файл в котором я хочу переместить указатель весит порядка 10 мб
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2013, 13:17     перенос курсора
Посмотрите здесь:

C++ Установка курсора
C++ Перенос курсора мыши.
Перемещение курсора C++
Перенос курсора по файлу (fstream) C++
Перемещение курсора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 13:33     перенос курсора #2
Непонятно о чём речь. В приведённом коде, курсор, после открытся файла, находится в начале, поэтому tellp() (почему не tellg() ?) выдаст 0. Потом, относительно начала, курсор передвигается на 0 байтов.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
25.06.2013, 13:40  [ТС]     перенос курсора #3
Цитата Сообщение от alsav22 Посмотреть сообщение
почему не tellg() ?
я так и не понял в чём проявляется разница между tellg и tellp
Цитата Сообщение от alsav22 Посмотреть сообщение
поэтому tellp() (почему не tellg() ?) выдаст 0.
Цитата Сообщение от Van111 Посмотреть сообщение
вот незамысловатый кусочек кода
(то есть вырезка я просто добавил первые три строки для точности)
Цитата Сообщение от alsav22 Посмотреть сообщение
отом, относительно начала, курсор передвигается на 0 байтов.
в том то и дело что передвигается этак байтов на 50
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 13:50     перенос курсора #4
Цитата Сообщение от Van111 Посмотреть сообщение
я так и не понял в чём проявляется разница между tellg и tellp
telg() для чтения (seekg() тоже).

Добавлено через 1 минуту
Цитата Сообщение от Van111 Посмотреть сообщение
в том то и дело что передвигается этак байтов на 50
Откуда видите?
Вот так передвинет относительно начала на 3, потом относительно текущего положения на 3:
C++
1
2
3
4
5
6
7
8
9
10
fstream ifile;
    string s;
    ifile.open(NameFile, ios::in, ios::binary);
    int cur = 3;  
    ifile.seekg(cur, ios::beg);
    ifile >> s;
    cout << s << endl;
    ifile.seekg(cur, ios::cur);
    ifile >> s;
    cout << s << endl;
Добавлено через 4 минуты
Цитата Сообщение от Van111 Посмотреть сообщение
(то есть вырезка я просто добавил первые три строки для точности)
Покажите не вырезку, иначе не понять, почему у вас курсор так себя ведёт.

Добавлено через 2 минуты
Цитата Сообщение от Van111 Посмотреть сообщение
так как например из за переноса в текущую позицию , то- есть перенос по сути не происходит
Если нужно в теущую позицию, то:
C++
1
ifile.seekg(0, ios::cur);
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
25.06.2013, 13:56  [ТС]     перенос курсора #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Откуда видите?
считываемый файл просматриваю
Цитата Сообщение от alsav22 Посмотреть сообщение
Покажите не вырезку, иначе не понять, почему у вас курсор так себя ведёт.
уже заменил на другой вариант
@alsav22, вы пробовали запустить свой код на файле размером мегабайт 10 , прочитать половину его, а потом запустить данные функции?

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
ifile.seekg(0, ios::cur);
отрицательные значения вместо нуля подставить можно?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 14:06     перенос курсора #6
Цитата Сообщение от Van111 Посмотреть сообщение
отрицательные значения вместо нуля подставить можно?
Можно.
Цитата Сообщение от Van111 Посмотреть сообщение
@alsav22, вы пробовали запустить свой код на файле размером мегабайт 10 , прочитать половину его, а потом запустить данные функции?
Свой файл дайте, попробую. При таком размере, всё должно работать.

Добавлено через 8 минут
Цитата Сообщение от Van111 Посмотреть сообщение
считываемый файл просматриваю
Интересно, как вы в нём ориентируетесь... И что значит: "просматриваю"...
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
25.06.2013, 14:23  [ТС]     перенос курсора #7
через notpad
Вложения
Тип файла: rar calla_lily_with_roses.rar (2.49 Мб, 4 просмотров)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 14:35     перенос курсора #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Интересно, как вы в нём ориентируетесь...
Что нужно сделать (или что вы делаете) и как потом это проверить (или как вы проверяете)?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
25.06.2013, 14:53  [ТС]     перенос курсора #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Что нужно сделать (или что вы делаете) и как потом это проверить (или как вы проверяете)?
считал до начала полигонов (первая буква f строке)
считал первую строчку, считал символ "f" второй строки, хотел отодвинуть курсор что следующей командой опять считать "f" а в результате получился перескок на 40 - 60 байт
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 15:41     перенос курсора #10
Всё работает, только непонятна цель. Вот код и результат на скрине. Делает, то что вы описали (зачем только так делать, непонятно):
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
37
38
39
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
using namespace std;
 
 
int main()
{ 
    char NameFile[26] = "calla_lily_with_roses.obj";
    
    fstream ifile;
    
    ifile.open(NameFile, ios::in | ios::binary);
    if (!ifile.is_open()) cout << "Error!" << endl;
    else
    {
        string temp;
         
        int n = 0;
        while (getline(ifile, temp))
        {
            if (temp[0] == 'f')
            {
                cout << temp << endl;
                char ch = ifile.get();
                cout << ch << endl;
                ifile.seekg(-1, ios::cur);
                getline(ifile, temp);
                cout << temp << endl;
                break;
            }
        }
        ifile.close();
    }
    
    system("pause");
    return 0;
}
Миниатюры
перенос курсора  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 15:45     перенос курсора #11
Код ищет первую строку, первый символ которой f. Читает её, потом считывает первый символ следующей строки, потом возвращает курсор на одну позицию назад и читает всю вторую строку.

Добавлено через 2 минуты
Задачу опишите, а то трудно понять, что, собственно, надо.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
25.06.2013, 15:47  [ТС]     перенос курсора #12
Цитата Сообщение от alsav22 Посмотреть сообщение
(зачем только так делать, непонятно):
обработка obj файла, выбрал такую архитектуру, потом переделал без перебега курсора. спасибо за ваш труд и помощ
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2013, 15:49     перенос курсора
Еще ссылки по теме:

Перенос текстового курсора C++
C++ Передвижение курсора в c++
Передвижение курсора C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 15:49     перенос курсора #13
Цитата Сообщение от Van111 Посмотреть сообщение
обработка obj файла
Это-то понятно... Непонятно, что у вас с курсором было и почему...
Yandex
Объявления
25.06.2013, 15:49     перенос курсора
Ответ Создать тему
Опции темы

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