Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/57: Рейтинг темы: голосов - 57, средняя оценка - 4.72
Aleksaaa
0 / 0 / 0
Регистрация: 08.07.2009
Сообщений: 6
1

Как добавить данные в listbox

08.07.2009, 02:17. Просмотров 11004. Ответов 9
Метки нет (Все метки)

Очень срочно!!! Нужно сделать переводчик(с английского на русский и обратно) при помощи MFC (Dialog Based). Интерфейс примерно такой: Слева 2 радио-батона (1й-англо-русский, 2й-русско-английский), правее ListBox, еще правее EditBox (для перевода), сверху - editbox для инкрементного поиска слов в ListBox. Есть файл в формате *.txt со словами и переводом (выглядит так, слово1=перевод1 <enter> слово2=перевод2 <enter> и так далее). Проблема - необходимо прочитать текстовый файл так, чтобы слова, расположенные до знака "=" добавились в ListBox, а после знака "=" - в правый EditBox. Чтобы при выборе слова в listbox появлялся его перевод в правос editbox. И еще вопрос - как организовать верхний editbox для инкрементного поиска слов в ListBox. Помогите please. Заранее премного благодарен!!!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2009, 02:17
Ответы с готовыми решениями:

Как добавить данные в таблицу (через vs 2010)
вообщем есть таблица, к ней написана программа через vs 2010( на с#) нужно установить кнопку...

В ListBox добавить строку сверху
привет всем! вот собственно и вопрос. в LISTBOX как добавить стоку сверху? автоматически она...

Как добавить данные в столбцы ListBox
Как добавить данные в столбцы ListBox

Как добавить данные из базы в listbox?
Подскажите как вывести данные в listbox string queryString = &quot;SELECT Id, Name, FROM...

Как добавить добавить данные в базу данных посредством LINQ
Как добавить добавить данные в базу данных посредством LINQ to SQL Ошибка: Нарушение...

9
Rififi
2367 / 1060 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
08.07.2009, 10:31 2
Как добавить данные в listbox
C++
1
2
3
CListBox lb;
lb.Create(...);
lb.AddString(_T("Ы-ы-ы"));
Добавлено через 2 минуты 57 секунд
как организовать верхний editbox для инкрементного поиска слов в ListBox
повесить обработчик на событие изменение текста (ON_EN_CHANGE), получить текст, искать его в ListBox
0
Aleksaaa
0 / 0 / 0
Регистрация: 08.07.2009
Сообщений: 6
08.07.2009, 11:27  [ТС] 3
Спасибо, но можно несного поподробней, у меня не столько много опыта работы на Visual C++, вот что у меня есть на данный момент,
Код
.....................................
protected:
    HICON m_hIcon;
    FILE *file; // объект файла
    char* file_name; // имя текстового файла
    char load_string[1000]; // массив для хранения записей из текстового файла
......................................
222.txt - файл выглядит так(например):
p=p
1=11
s=sl
2=21
3=31
4=41
Мне нужно вытащить данные из файла в listbox до знака "равно" (на примере, который приведен выше: p,1,s,2,3,4), а при выборе слова в listbox - справа в editbox чтобы появлялся перевод в соответствие с выбранным словом в listbox
Код
..........................................
void CSlovarDlg::OnButton1() 
{
    file_name="222.txt";

    file = fopen(file_name,"r"); // открытие файла 222.txt

    if(file != 0){
        while(!feof(file)){ // считываем файл до конца
        fgets(load_string,50,file);
        m_listc1.AddString(load_string); // добавляем в listbox
        
        }
    }
    
    fclose(file);
UpdateData(FALSE);    
}
открыл файл, прочитал до конца, но как именно добавлять слова, которые расположены в файле до знака "=" в listbox так и не понял пока...Помогите, уважаемые, буду очень ВАМ благодарен
0
Rififi
2367 / 1060 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
08.07.2009, 12:13 4
ищешь вхождение символа '=' в считанной строке
в простейшем (твоём) случае можно так
Код
TCHAR* p = _tcschr(buf, _T('='));
*p++ = _T('\0');
теперь buf - первое слово, p - второе слово
0
Aleksaaa
0 / 0 / 0
Регистрация: 08.07.2009
Сообщений: 6
08.07.2009, 13:02  [ТС] 5
Цитата Сообщение от Rififi Посмотреть сообщение
ищешь вхождение символа '=' в считанной строке
в простейшем (твоём) случае можно так
Код
TCHAR* p = _tcschr(buf, _T('='));
*p++ = _T('\0');
теперь buf - первое слово, p - второе слово
У меня получается считать только весь файл, а как считывать построчно, и Вы написали _tcschr(buf, _T('=')); как эта функция работает, у меня пишет 'error C2065: 'buf' : undeclared identifier'. Мне нужно, чтобы в ListBox'е были все строки до знака "=". Извини за такие "не очень умные" вопросы, но о таких функциях как _T и _tcschr() впервые слышу. Код не совсем понятен. _T('\0') - тоже не понятно...
0
Vourhey
Почетный модератор
6931 / 2450 / 225
Регистрация: 29.07.2006
Сообщений: 13,100
08.07.2009, 13:04 6
Эта ошибка означает, что у тебя buf не объявлен. Мдя...
А что непонятного? Он дописывает ноль в конец строки. С-строки должны иметь нулевой символ на конце. Учим матчасть.
но о таких функциях как _T и _tcschr() впервые слышу
Открой msdn и почитай.
0
Aleksaaa
0 / 0 / 0
Регистрация: 08.07.2009
Сообщений: 6
08.07.2009, 13:27  [ТС] 7
Цитата Сообщение от Rififi Посмотреть сообщение
ищешь вхождение символа '=' в считанной строке
в простейшем (твоём) случае можно так
Код
TCHAR* p = _tcschr(buf, _T('='));
*p++ = _T('\0');
теперь buf - первое слово, p - второе слово
Код:
................................................
C++
1
2
3
4
5
6
7
8
9
10
11
12
file_name="222.txt";
file = fopen(file_name,"r");
if(file != 0){
  while(!feof(file)){  
     fgets(load_string,50,file);
     char buf[1000] = load_string; 
     TCHAR* p = _tcschr(buf, _T('=')); 
     m_listc1.AddString(buf);
  }
}
fclose(file);
UpdateData(FALSE);
........................................
Объясни пожалучста что не так...

Добавлено через 7 минут 0 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void CSlovarDlg::OnRadio1() 
{
 
file_name="222.txt";
 
file = fopen(file_name,"r");
 
if(file != 0){
while(!feof(file)){
 
 
fgets(load_string,50,file); // 
char buf[1000] = load_string; 
TCHAR* p = _tcschr(buf, _T('='));
m_listc1.AddString(buf);
 
}
}
 
fclose(file);
UpdateData(FALSE); 
}
Объясни что не так...пожалуста...
Можно на моем примере объяснить, как из файла 222.txt вытащить в listbox все то, что до "=", а при выборе слова в listbox'е чтобы в правом edit'е был перевод(слова после "=") соответствующий. Пожалуйста, пожалуйста, я плохо это понимаю, напишите пожалуйста на примере.
0
Rififi
2367 / 1060 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
08.07.2009, 13:51 8
Aleksaaa,
У меня получается считать только весь файл, а как считывать построчно, и Вы написали _tcschr(buf, _T('=')); как эта функция работает, у меня пишет 'error C2065: 'buf' : undeclared identifier'. Мне нужно, чтобы в ListBox'е были все строки до знака "=". Извини за такие "не очень умные" вопросы, но о таких функциях как _T и _tcschr() впервые слышу. Код не совсем понятен. _T('\0') - тоже не понятно...

это был просто пример.
тебе надо не buf использовать, а ту переменную, в которую было прочитано значение.
макрос _T и функции вида _t* нужны для unicode-совместимости, обычный тип char[*] лучше не использовать, иначе можно наткнуться на странные ошибки в новых студиях (>=2005) и старых проектах.

до выполнения этого кода строка выглядела так:
aaaaaaa=bbbbbbb
^buf
после:
aaaaaaa
^buf
bbbbbbb
^p
Добавлено через 2 минуты 16 секунд
ps. аа, пофиг. дольше объяснять. просто замени _T('=') на '=', _T('\0') на '\0' и _tcschr на strchr
1
Aleksaaa
0 / 0 / 0
Регистрация: 08.07.2009
Сообщений: 6
09.07.2009, 16:01  [ТС] 9
Огромное спаааааааааасибо

Добавлено через 56 минут 52 секунды
Rififi,

C++
1
2
3
4
5
6
void CSlovarDlg::OnSelchangeList1() 
{
    UpdateData(TRUE);
m_edit2 = p; // присвоение полю переменной справа от "="
UpdateData(FALSE);  
}
вроде присвоил p, а выводит только последнюю строку в файле, наверное указатель на последней строке остался...помоги please организовать вывод строки справа от "=" в текстовое поле, как сделать чтобы указатель перемещался по файлу после выбора нужного слова в listbox

Добавлено через 20 часов 59 минут 17 секунд
Данные из файла слева от "=" в листбокс занесены

Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void CSlovarDlg::OnRadio1() 
{
 
    file_name="222.txt";
 
    file = fopen(file_name,"r");
    
    if(file != 0){
        while(!feof(file)){
            
        
        fgets(load_string,50,file); 
        p = strchr(load_string, '=');
        *p++ = '\0';
        m_listc1.AddString(load_string);
        
        }
    }
    
    fclose(file);
UpdateData(FALSE);  
}
Получилось - load_string - это данные из файла слева от "=", p - данные из файла справа от "="

Далее привязал к србытию выбора строки в listbox:

C++
1
2
3
4
5
6
7
8
void CSlovarDlg::OnSelchangeList1() 
{
//long count = m_listc1.GetCount();
 
 fseek(file, 1 , SEEK_CUR); // перемещение указателя файла
m_edit2 = p; // присвоение текстовому полю значений справа от "=", т.е. перевода тех слов которые находятся в listbox
UpdateData(FALSE);
}
но по-моему неправильно... я просто в c++ очень мало работал...

Пожалуйста помогите сделать так чтобы в текстовом поле появлялся перевод слов из listbox, т.е. мне надо чтобы в текстовом поле отображались те слова, которые находятся в файле 222.txt(описание файла выше) справа от "=", но так чтобы в соответствии с выбором слова из listbox. На примере 222.txt - когда я выбираю из listbox "1" в текстовом поле должно появится "11", при выборе "2" - в текстовом поле "21" и так далее, помогите пожалуйста, после завтра сдавать надо...
Я с помощью
C++
1
fseek()
перемещаю курсор, а он не перемещается, как выдавал последнюю строку так и выдает, ответьте кто нибудь please...

Добавлено через 3 часа 32 минуты 29 секунд
please, помогите поместить в правый editbox перевод...я уже перепробовал все, как переместить курсор и считать нужный фрагмент строки, чтобы при выборе в listbox появлялся в edit текст, который справа от "=" (в файле 222.txt), хотя бы какую нибудь наводку, а то у меня уже голова не варит, мне скоро сдавать, в MSDN все на английском, а как правильно все функции связать чтобы выполнить алгоритм, не могу догнать, кто-нибудь....будьте так добры

Добавлено через 8 минут 28 секунд
C++
1
2
3
4
5
6
7
8
9
10
void CSlovarDlg::OnSelchangeList1() 
{
int count = m_listc1.GetCount();
 
    //p = strchr(load_string, '=');
        
    m_edit2 = p;
UpdateData(FALSE);
 
}
После этого m_edit2 = p; в edit добавляется "101", т.е. последняя строка в файле...
Как же все таки сделать чтобы в edit добавлялась строка в соответствии с выбором из listbox'а, никак не соображу
0
Богдан Корниено
9 / 9 / 0
Регистрация: 24.03.2011
Сообщений: 152
30.06.2012, 12:10 10
Товарищи, помогите разобраться. Мне нужно прочесть из текстового файла список айпи адрессов в ListBox. Делю я это так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
in.open("contacts.txt");
        if(in.fail()){
            // действия, при ошибке открытия файла
            // создать новый файл
        } else {
            char str[15];
            TCHAR toOut[25];
            while(!in.eof()){
                in.getline(str, 15);
                _stprintf(toOut, _T("%ws"), str);
                SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)toOut);
            }
        }
        in.close();
contacts.txt:
192.168.0.1
192.168.0.2
192.168.0.3
...
192.168.0.254

P.S. Пишу Win32 api приложение. Файл читается, но вместо адрессов в список выводятся какие-то каракули. По советуйте, что делать?
0
30.06.2012, 12:10
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2012, 12:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

как добавить в ListBox
Есть лист из 3 столбцов, наименование, Ед.из, цена При поиске наименования в listBox1 появляются...

Как прочитать данные из ячейки, и если она пуста добавить данные
Привет всем. У меня есть вот такой код: &lt;?php $arrqq = array($row-&gt;id); foreach($arrqq as...

Как добавить строку в listbox?
как добавить строку в listbox между другими строками int d = (listBox2.SelectedIndex); ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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