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

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

Войти
Регистрация
Восстановить пароль
 
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
#1

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

25.06.2013, 13:17. Просмотров 889. Ответов 12
Метки нет (Все метки)

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 мб
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2013, 13:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос перенос курсора (C++):

Перенос курсора мыши. - C++
Товарищи программисты как перенести курсор мыши в заданную позицию на экране? Помогите пожалуйста!

Перенос текстового курсора - C++
Здравствуйте. Имеется следующая программа (заменяет все чётные элементы вектора на x): #include "stdafx.h" #include "iostream"...

Перенос курсора по файлу (fstream) - C++
Добрый вечер. Есть текстовый файл. В нем есть строки. Вопрос: как передвинуть курсор из текущего положения в начало строки под номером N?...

Позиция курсора - C++
Можете мне пояснить пораметры этой записи пожалуйста. Что можно менять что нет.. COORD position = {0, 0}; HANDLE hConsole =...

Координаты курсора - C++
Помогите как правильно сделать, чтобы при наведении курсора на картинку в лейблах отображались координаты х и у. Написал: void...

С++ эмуляция курсора - C++
Здравствуйте, возник следующий вопрос. Возможно ли, средствами C++ реализовать отдельный, независимый курсор в программе, который...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 13:33 #2
Непонятно о чём речь. В приведённом коде, курсор, после открытся файла, находится в начале, поэтому tellp() (почему не tellg() ?) выдаст 0. Потом, относительно начала, курсор передвигается на 0 байтов.
0
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
25.06.2013, 13:40  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
почему не tellg() ?
я так и не понял в чём проявляется разница между tellg и tellp
Цитата Сообщение от alsav22 Посмотреть сообщение
поэтому tellp() (почему не tellg() ?) выдаст 0.
Цитата Сообщение от Van111 Посмотреть сообщение
вот незамысловатый кусочек кода
(то есть вырезка я просто добавил первые три строки для точности)
Цитата Сообщение от alsav22 Посмотреть сообщение
отом, относительно начала, курсор передвигается на 0 байтов.
в том то и дело что передвигается этак байтов на 50
0
alsav22
5419 / 4815 / 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);
2
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
25.06.2013, 13:56  [ТС] #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Откуда видите?
считываемый файл просматриваю
Цитата Сообщение от alsav22 Посмотреть сообщение
Покажите не вырезку, иначе не понять, почему у вас курсор так себя ведёт.
уже заменил на другой вариант
@alsav22, вы пробовали запустить свой код на файле размером мегабайт 10 , прочитать половину его, а потом запустить данные функции?

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

Добавлено через 8 минут
Цитата Сообщение от Van111 Посмотреть сообщение
считываемый файл просматриваю
Интересно, как вы в нём ориентируетесь... И что значит: "просматриваю"...
0
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
25.06.2013, 14:23  [ТС] #7
через notpad
0
Вложения
Тип файла: rar calla_lily_with_roses.rar (2.49 Мб, 4 просмотров)
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 14:35 #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Интересно, как вы в нём ориентируетесь...
Что нужно сделать (или что вы делаете) и как потом это проверить (или как вы проверяете)?
1
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
25.06.2013, 14:53  [ТС] #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Что нужно сделать (или что вы делаете) и как потом это проверить (или как вы проверяете)?
считал до начала полигонов (первая буква f строке)
считал первую строчку, считал символ "f" второй строки, хотел отодвинуть курсор что следующей командой опять считать "f" а в результате получился перескок на 40 - 60 байт
0
alsav22
5419 / 4815 / 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;
}
2
Миниатюры
перенос курсора  
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 15:45 #11
Код ищет первую строку, первый символ которой f. Читает её, потом считывает первый символ следующей строки, потом возвращает курсор на одну позицию назад и читает всю вторую строку.

Добавлено через 2 минуты
Задачу опишите, а то трудно понять, что, собственно, надо.
1
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
25.06.2013, 15:47  [ТС] #12
Цитата Сообщение от alsav22 Посмотреть сообщение
(зачем только так делать, непонятно):
обработка obj файла, выбрал такую архитектуру, потом переделал без перебега курсора. спасибо за ваш труд и помощ
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 15:49 #13
Цитата Сообщение от Van111 Посмотреть сообщение
обработка obj файла
Это-то понятно... Непонятно, что у вас с курсором было и почему...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2013, 15:49
Привет! Вот еще темы с ответами:

Перемещение курсора - C++
Мне нужно сделать что-то типа интерфейса на консоли.Как задавать координаты курсора на консоли в С++?(в Паскале аналог gotoxy()). ...

Передвижение курсора в c++ - C++
Здравствуйте, Я начал писать небольшую программу которая должна выполнять заданный алгоритм действий. Суть в чем: 1)Ищем например...

Положение курсора в с++ - C++
Как получить координаты позиции каретки(текстового курсора) в с++? Мне очень надо записать эти координаты в переменные.

Передвижение курсора - C++
Необходимо осуществить передвижение курсора с возможностью приостановки и возобновления.Как сделать например если нажать клавишу влево...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.06.2013, 15:49
Ответ Создать тему
Опции темы

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