Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2019, 11:53   #1
Viktor12
 
Регистрация: 05.03.2015
Сообщений: 8
По умолчанию Считывание строки из ТХТ

Срочно нужна ваша помощь, уважаемые специалисты.
Есть текстовый файл, в нем 7 строк, требуется считать именно 5-ю строку.


Есть кистяк кода, но не хватает функции считывания именно 5-й строки.
Код приведенный ниже считывает только 1-ю строку файла, а нужно 5-ю.
Помогите пожалуйста дополнить код требуемой функцией, очень прошу.


Код:
CStdioFile fp;
if(fp.Open(_T("File.txt"), CFile::modeRead)) {
    CString str;
    fp.ReadString(str);
    fp.Close();
}
______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Alex11223; 01.09.2019 в 14:01.
Viktor12 вне форума Ответить с цитированием
Старый 01.09.2019, 14:02   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Viktor12 Посмотреть сообщение
Код приведенный ниже считывает только 1-ю строку файла, а нужно 5-ю.
так считайте 5 раз )
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.09.2019, 09:38   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Код:
for ( int i = 0; i < 5; i++ ) fp.ReadString(str);
Arigato вне форума Ответить с цитированием
Старый 02.09.2019, 12:37   #4
Viktor12
 
Регистрация: 05.03.2015
Сообщений: 8
По умолчанию Проект

Вот исходники самого проекта. Программа считывает нужную строку, НО после копирования в буфер памяти и вставки в блокнот или куда-либо еще, вставляются крякозябли. Помогите пожалуйста. Какие-то проблемы с кодировкой ???
Сам файл с которого считывается строка находится в папке debug/444.txt
Вложения
Тип файла: rar 111.rar (1.78 Мб, 11 просмотров)
Viktor12 вне форума Ответить с цитированием
Старый 02.09.2019, 13:56   #5
Viktor12
 
Регистрация: 05.03.2015
Сообщений: 8
По умолчанию

Я немного о...ваю от вас, уважаемые программисты
Есть пустой проект созданный на базе Microsoft VC C++ 6.0
В нем диалоговое окно, а втом окне всего одна кнопка при нажатии которой копируется 5-я строка из текстового файла, который находиться в той же дирректории, что и исполняемый файл
Требуется чтобы строка скопировалась в буфер памяти и ее можно было бы вставить в блокнот, в ворд или куда либо еще... Главное чтобы строчка после вставки не отображалась крякозяблями, так как исходная строка в кирилице.

Ну помогите уже хотть кто-нибудь. Я благодарен за предыдущие ответы, низкий поклон, но ожидаемого результата не получилось.
Надеюсь на вас, уважаемые профессионалы С++.
Viktor12 вне форума Ответить с цитированием
Старый 02.09.2019, 14:16   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://programmersforum.ru/showpost...7&postcount=10
Цитата:
Сообщение от Viktor12 Посмотреть сообщение
Требуется чтобы строка скопировалась в буфер памяти и ее можно было бы вставить в блокнот, в ворд или куда либо еще
если это вся задача, то зачем тут С++, да еще и такой древний? Возьмите AutoHotkey и т.п.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.09.2019, 14:23   #7
Viktor12
 
Регистрация: 05.03.2015
Сообщений: 8
По умолчанию

Планируется такой сценарий...
Диалоговое окно- в нем 20 кнопок-при нажатии 1-й кнопки копируется 1-я строка из текстового файла в буфер-макрорекордер берет содержимое буфера и вставляет в поле на странице сайта-макрорекордер нажимает вторую кнопку и копирует вторую строку-содержимое буфера вставляется в поле страници второго сайта и т.д.

Можно конечно с помощью макросов организовать копирование из самого текстового файла но тогда сам файл макросов получается довольно громоздким так как записывает все передвижения мыши. Если сайтов будет 100 то файл макроса будет занимать примерно 20-30 мгб.

Требовалось организовать минимальное передвижение курсора мыши, то есть копирование выполнялось бы в половину затрат "маханием" мыши.
Как то так.
Viktor12 вне форума Ответить с цитированием
Старый 02.09.2019, 14:26   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, нужно было сразу же выложить свой код.
во-вторых, Вы только в пост #5 соблаговолили сообщить, что работаете с буфером обмена.
Код:
void CMy111Dlg::OnButton1()
{
        // TODO: Add your control notification handler code here
        CStdioFile fp;
if(fp.Open(_T("444.txt"), CFile::modeRead)) {
    CString str;

        for (int i = 0; i < 6; i++) fp.ReadString(str);



    //????? str ???????? ? TextBox
    fp.Close();
    if(OpenClipboard())//открываем буфер обмена
    {
       HGLOBAL hgBuffer;
       char* chBuffer;
       EmptyClipboard(); //очищаем буфер
       hgBuffer= GlobalAlloc(GMEM_DDESHARE, str.GetLength()+1);//выделяем память
       chBuffer= (char*)GlobalLock(hgBuffer); //блокируем память
       strcpy(chBuffer, LPCSTR(str));
       GlobalUnlock(hgBuffer);//разблокируем память
       SetClipboardData(CF_TEXT, hgBuffer);//помещаем текст в буфер обмена
       CloseClipboard(); //закрываем буфер обмена
    }

    //чтение текста из буфера обмена
    CString fromClipboard;//в эту переменную сохраним текст из буфера обмена
    if ( OpenClipboard() )//открываем буфер обмена
    {
       HANDLE hData = GetClipboardData(CF_TEXT);//извлекаем текст из буфера обмена
       char* chBuffer= (char*)GlobalLock(hData);//блокируем память
       fromClipboard = chBuffer;
       GlobalUnlock(hData);//разблокируем память
       CloseClipboard();//закрываем буфер обмена
    }}
CDialog::OnInitDialog();
    CWnd *okbtn = GetDlgItem( IDC_BUTTON1 );
    if ( okbtn ) {
        okbtn->EnableWindow( FALSE );
    }

}

Цитата:
Сообщение от Viktor12 Посмотреть сообщение
одна кнопка при нажатии которой копируется 5-я строка из текстового файла
а что, только с 5-й строкой проблема, первая строка копируется нормально? Никаких Экракозяблей" нет ?


теперь по сути вопроса.
я абсолютно не знаю C++. да и буфер обмена в Windows то же "чудо".
но, тем не менее, уверен, что проблема в кодовой странице (которую как-то нужно задать для текста в вашем буфере обмена).
ищите, как установить кодовую страницу для текста в буфере обмена
например, попробуйте костыли отсюда - https://www.programmersforum.ru/showthread.php?t=224798

или почитайте, как вообще реализован буфер обмена: https://habr.com/ru/post/339442/
вот обсуждение https://wasm.in/threads/korrektno-ko...e-klavy.13016/
и вот тут ещё обсуждение той же проблемы (но на Delphi) http://www.delphikingdom.com/asp/ans...IDAnswer=37007

а, может быть, поможет предварительное преобразование текста в ANSI в Unicode...

Последний раз редактировалось Serge_Bliznykov; 02.09.2019 в 14:29.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.09.2019, 14:32   #9
Viktor12
 
Регистрация: 05.03.2015
Сообщений: 8
По умолчанию

Обидно просто,что программы вроде функционирует но не хватает корректировки ошибки в том, что из буфера памяти вставляются крякозябли. Мне сложно оценить проблематичность корректировки кода, так как только начинаю изучать языки программирования. Но вдруг проблема в куске кода, где происходит копирование и вставка из буфера, что то с кодировкой видимо... эх... (
Viktor12 вне форума Ответить с цитированием
Старый 02.09.2019, 14:44   #10
Viktor12
 
Регистрация: 05.03.2015
Сообщений: 8
По умолчанию

Serge_Bliznykov ЭТО САМОЕ ТО ! Перед копированием сменил раскладку с Енг на Рус и теперь нет крякозяблей.
С кодом программы разбираться не стану, хватает и того.
Огромное спасибо ! Вот Вы маг программирования ! Огромнейший ПЛЮС Вам !!! СПАСИБО !
Viktor12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание строки (Си) zaira001002 Помощь студентам 2 05.10.2016 01:46
Считывание символов из строки в С# alik98 Помощь студентам 2 07.03.2013 22:42
считывание строки из файла kibcat Общие вопросы C/C++ 2 17.05.2012 10:46
Считывание строки Blad47 Помощь студентам 1 07.04.2011 20:31
Считывание строки с клавиатуры С++ Влюблённая в мечту Помощь студентам 12 01.04.2011 20:44