Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Срочно нужна ваша помощь, уважаемые специалисты.
Есть текстовый файл, в нем 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 в 15:01.
Viktor12 вне форума   Ответить с цитированием
Старый 01.09.2019, 15:02   #2
Alex11223
Модератор
Заслуженный модератор
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,233
Репутация: 3739

icq: 512-765
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от Viktor12 Посмотреть сообщение
Код приведенный ниже считывает только 1-ю строку файла, а нужно 5-ю.
так считайте 5 раз )
Alex11223 на форуме   Ответить с цитированием
Старый 02.09.2019, 10:38   #3
Arigato
СуперПрограммист
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Адрес: Россия РФ Регистрация: 27.07.2008
Сообщений: 13,845
Репутация: 3619
По умолчанию

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

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

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

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

icq: 512-765
skype: alexp.frl
По умолчанию

https://programmersforum.ru/showpost...7&postcount=10
Цитата:
Сообщение от Viktor12 Посмотреть сообщение
Требуется чтобы строка скопировалась в буфер памяти и ее можно было бы вставить в блокнот, в ворд или куда либо еще
если это вся задача, то зачем тут С++, да еще и такой древний? Возьмите AutoHotkey и т.п.
Alex11223 на форуме   Ответить с цитированием
Старый 02.09.2019, 15:23   #7
Viktor12
 
Регистрация: 05.03.2015
Сообщений: 8
Репутация: 10
По умолчанию

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

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

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

во-первых, нужно было сразу же выложить свой код.
во-вторых, Вы только в пост #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 в 15:29.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 02.09.2019, 15:32   #9
Viktor12
 
Регистрация: 05.03.2015
Сообщений: 8
Репутация: 10
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание строки (Си) zaira001002 Помощь студентам 2 05.10.2016 02: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


22:25.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.