Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48

Построчное чтение из файла с добавлением в ListBox

08.06.2020, 16:01. Показов 2699. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть файл, мне нужно, чтобы программа вытаскивала по одной строке и вставила их в список

Можете подсказать функцию или другой метод как это сделать?

Часть кода:
C++
1
2
3
4
5
6
7
8
9
10
hListBox = GetDlgItem(hDlg, IDC_LIST1);
        if (nU == 0)
            for (int i = 0; i < nU && i < 100; ++i)
                SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)masU[i].str);
        else
            for (int i = 0; i < nU && i < 100; ++i)
            {
                file.getline(zp, 100);
                ???
            }
Может в SendMessage через 4-ый параметр можно как-то сделать, но не знаю как file.getline представить как LPARAM
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2020, 16:01
Ответы с готовыми решениями:

Почему Microsoft больше не публикует книги по Win32 API? В частности, разработка графического интерфейса с Win32
Кто-нибудь знает, почему Microsoft перестала публиковать книги по программированию Win32 GUI? Я использую электронную книгу...

Как можно скомпилировать win32 приложение в win32 приложение без консоли с помощью g++?
Как можно скомпилировать win32 приложение в win32 приложение без консоли с помощью g++? Например по нажатии на кнопку. Объясните только...

Добавление строк c listbox на listbox WinApi
Здравствуйте, подскажите пожалуйста как правильно сделать, чтобы выделенные строки в первом листбоксе автоматически добавлялись на второй...

23
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48
08.06.2020, 18:42  [ТС]
Да, компилятор не ругается, но список так и не выводится

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FILE* File = fopen("Spisok.bin", "a+");
INT_PTR CALLBACK ViewDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    char zp[100];
 
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        hListBox = GetDlgItem(hWnd, IDC_LIST1);
            for (int i = 0; i < nU && i < 100; ++i)
            {
                fgets(zp, 100, File);
                SendDlgItemMessage(hWnd, IDC_LIST1, LB_ADDSTRING, (WPARAM)0, (LPARAM)zp);
            }
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.06.2020, 19:14
Лучший ответ Сообщение было отмечено Adm178 как решение

Решение

Цитата Сообщение от Adm178 Посмотреть сообщение
Да, компилятор не ругается, но список так и не выводится
C++
1
2
3
4
    char buf[1024];
    std::ifstream in("D:\\4.txt");
    while (in.getline(buf, 1024))
        ::SendDlgItemMessageA(hWnd, IDC_LIST1, LB_ADDSTRING, (WPARAM)0, (LPARAM)buf);
1
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48
09.06.2020, 16:41  [ТС]
Все отлично работает, спасибо)
А можно ограничить вывод из файла до опр. символа?
Например пока не наткнется на '|'

Пробовал cin.getline, но тогда в listbox ничего не выводится
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
09.06.2020, 17:13
Цитата Сообщение от Adm178 Посмотреть сообщение
А можно ограничить вывод из файла до опр. символа?
Покажи пример
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48
09.06.2020, 17:48  [ТС]
cin.getline(str, 256, '|'));

То есть он посимвольно считывает и останавливается, если символ равен, например, '|'
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
09.06.2020, 18:30
Цитата Сообщение от Adm178 Посмотреть сообщение
То есть он посимвольно считывает и останавливается, если символ равен, например, '|'
Файл покажи
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48
09.06.2020, 18:34  [ТС]
Вот, но без лишнего кода я чуть выше отправлял
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48
09.06.2020, 18:35  [ТС]
Kod.txt
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
09.06.2020, 18:39
Цитата Сообщение от Adm178 Посмотреть сообщение
Вот, но без лишнего кода я чуть выше отправлял
Файл, из которого ты читаешь данные, Test1.txt
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48
09.06.2020, 19:08  [ТС]
Spisok.txt
В это примере вместо | стоит <
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
09.06.2020, 19:11
А где у тебя там символ | ?

Добавлено через 2 минуты
Считывай строку также, как сейчас, и распарсивай её при помощи std::regex
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48
09.06.2020, 19:13  [ТС]
Ну какая разница какой символ

Цитата Сообщение от Adm178 Посмотреть сообщение
В этом примере вместо | стоит <
Добавлено через 28 секунд
Добро, попробую
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48
10.06.2020, 21:42  [ТС]
Можете подсказать?
Мне необходимо из списка выбранную строку вставить в другое окно в edixbox. Нужно рассовать каждое слово строки по edixbox-ам, но мне хотя бы в один вставить.
Пробовал вот такие функции, но не пойму отчего именно не срабатывает.

SetDlgItemText(hWnd, IDC_GET_NAZ, structEnd.studBeg.gamm);
SetDlgItemInt(hWnd, IDC_GET_NAZ, 2, FALSE);
SendMessage(GetDlgItem(hWnd, IDC_GET_NAZ), WM_SETTEXT, (char)2, FALSE);
SendMessage(hWnd, IDC_GET_NAZ, (char)2, FALSE);

Самое интересное, что функции работают, только в других случаях. Если вместо идентификатора editbox поставить идентификатор кнопки, то после нажатия на нее измениться название этой кнопки. То есть я нажимаю на нее и ее название меняется на тот текст, который я поставил в функции (в данных примерах это символ "2")
Миниатюры
Построчное чтение из файла с добавлением в ListBox   Построчное чтение из файла с добавлением в ListBox  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
10.06.2020, 21:47
Цитата Сообщение от Adm178 Посмотреть сообщение
Мне необходимо из списка выбранную строку вставить в другое окно в edixbox. Нужно рассовать каждое слово строки по edixbox-ам, но мне хотя бы в один вставить.
Пробовал вот такие функции, но не пойму отчего именно не срабатывает.
hWnd - это что, какой диалог?

C++
1
SetDlgItemTextA(hWnd, IDC_GET_NAZ, "2");
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48
11.06.2020, 08:15  [ТС]
Это дескриптор главного окна. Он вставляется почти во все функции программы
Вот заголовок функции:
INT_PTR CALLBACK ViewDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

У меня есть другая рабочая программа и некоторые функции я оттуда повыдергивал. Ориентируюсь на нее.

Добавлено через 39 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
SetDlgItemTextA(hWnd, IDC_GET_NAZ, "2");
Не работает, видимо дело не в функции, но не пойму в чем. resourse.h проверял, там все в порядке
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.06.2020, 11:00
Цитата Сообщение от Adm178 Посмотреть сообщение
Не работает, видимо дело не в функции, но не пойму в чем. resourse.h проверял, там все в порядке
Всё она работает. Покажи весь код.
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 48
11.06.2020, 14:55  [ТС]
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
FILE* File = fopen("Spisok.bin", "a+");
INT_PTR CALLBACK ViewDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{   
    StructEnd structEnd;
    static StructEnd masU[100];
    static int nU = 1;
    static HWND hListBox;
    char zp[120];
    int cI;
 
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
        case WM_INITDIALOG:
            hListBox = GetDlgItem(hWnd, IDC_LIST1);
            if (nU == 0)
                for (int i = 0; i < nU && i < 100; ++i)
                    SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)masU[i].str);
 
            
            else//Выводит из файла строки и вставляет в ListBox
            {
                fgets(zp, 120, File); 
                std::ifstream in("Spisok.bin");
                while (in.getline(zp, 120))
                {
                    N++;
                    // SORT_DIGITSASNUMBERS
                    ::SendDlgItemMessageA(hWnd, IDC_LIST1, LB_ADDSTRING, (WPARAM)0, (LPARAM)zp);
                }
            }
 
            return (INT_PTR)TRUE;
 
        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
            case IDOK:
                nU = SendMessage(hListBox, LB_GETCOUNT, 0, 0);
                for (int i = 0; i < nU && i < 100; ++i)
                    SendMessage(hListBox, LB_GETTEXT, i, (LPARAM)masU[i].str);
 
                EndDialog(hWnd, LOWORD(wParam));
                return (INT_PTR)TRUE;
            case IDCANCEL:
                nU = SendMessage(hListBox, LB_GETCOUNT, 0, 0);
                for (int i = 0; i < nU && i < 100; ++i)
                    SendMessage(hListBox, LB_GETTEXT, i, (LPARAM)masU[i].str);
 
                EndDialog(hWnd, LOWORD(wParam));
                return (INT_PTR)TRUE;
 
            case IDC_REC_ADD:
                EndDialog(hWnd, LOWORD(wParam));
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ADD_REC), hWnd, GetDataDlgProc);
                DialogBox(hInst, MAKEINTRESOURCE(IDD_VIEW), hWnd, ViewDlgProc);
 
                return (INT_PTR)TRUE;
 
            case IDC_K12:
                cI = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
                
                if (cI != LB_ERR)
                {
                    EndDialog(hWnd, LOWORD(wParam));
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ADD_REC), hWnd, GetDataDlgProc);
                    nU = SendMessage(hListBox, LB_GETCOUNT, 0, 0);
                    for (int i = 0; i < nU && i < 100; ++i)
                        cI = SendMessage(hListBox, LB_GETTEXT, i, (LPARAM)masU[0].str);
 
                    structEnd.studBeg.naz[0] = masU[0].str[0];
//////////////////////////////////////////////////////////////////
                    SetDlgItemTextA(hWnd, IDC_GET_NAZ, "2");
//////////////////////////////////////////////////////////////////
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_VIEW), hWnd, ViewDlgProc);
                }
                else
                {
                    MessageBox(hWnd, 
                        TEXT("Сначала надо выделить элемент списка"),
                        TEXT("Ошибка"), MB_OK);
                }
                
                return (INT_PTR)TRUE;
 
            case IDC_REC_DELETE:
                int curItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
                if (curItem != LB_ERR)
                    SendMessage(hListBox, LB_DELETESTRING, curItem, 0);
 
                else
                    MessageBox(hWnd,
                        TEXT("Сначала надо выделить элемент списка"),
                        TEXT("Ошибка"), MB_OK);
 
                return (INT_PTR)TRUE;
            }
            break;
    }
    return (INT_PTR)FALSE;
}
0
Заблокирован
11.06.2020, 14:58
Adm178, проект покажи. Заархивируй и прекрепи - пожалуйста.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.06.2020, 15:11
Цитата Сообщение от Adm178 Посмотреть сообщение
SetDlgItemTextA(hWnd, IDC_GET_NAZ, "2");
//////////////////////////////////////////////////////////////////
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_VIEW), hWnd, ViewDlgProc);
IDC_GET_NAZ где находится, в диалоге IDD_VIEW ?

Добавлено через 28 секунд
Покажи файл с расширением .rc

Добавлено через 1 минуту
И почему для диалога IDD_VIEW используется та же функция ViewDlgProc, из которой он создаётся?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.06.2020, 15:11
Помогаю со студенческими работами здесь

Возможно ли перетаскивание элементов (drag/drop) внутри listbox и между двумя listbox?
Подскажите возможно ли перетаскивание элементов внутри listbox и между двумя listbox, если возможно то как осуществить dragndrop, если нет...

При выделении строки в ListBox отображать ее в Edit, где можно отредактировать и заменить в ListBox-е
Подскажите пожалуйста как зделать задачку:При выделении строки в поле ListBox даная строка отображалась в Edit, где можна его...

Перенести данные из ListBox на форме в Listbox на PageСontrol
Доброго времени суток! Как заставить данные которые вносятся на Form в ListBox перенести на Listbox, который находится на Pagekontrol?

Возможно ли при выборе через opendialog заносить в ListBox имена файлов, а при чтении из ListBox получать путь к файлам?
Возможно ли при выборе через opendialog заносить в ListBox имена файлов, а при чтении из ListBox получать путь к файлам?

Эпидемия Win32.HLLW.Shadow.based (Net-Worm.Win32.Kido, W32.Downadup, Worm:Win32/Conficker)
Компания «Доктор Веб» информирует о появлении новой троянской программы, которая при запуске компьютера предлагает ввести регистрационный...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru