Читать в 2D массив из файла в Qt C ++

0

У меня есть comboBox в Qt GUI в mainwindow.cpp. У меня есть этот текстовый файл со списком писем и имен сотрудников вроде этого (это всего лишь пример файла):

Pete White      [email protected]
Jack Peterson   [email protected]
Mike Jackson    [email protected]
Dave Middleton  [email protected]
Sylvester Brown [email protected]

Поэтому ComboBox должен отображать эти имена, но НЕ электронные письма, поэтому, я думаю, я мог бы прочитать этот файл в виде 2D-массива. (Я знаю, как это сделать в C, но не в C++ или Qt) И тогда мне нужен только первый столбец.

Этот comboBox используется в приложении простой формы. Поэтому, если эта форма заполнена, она помещает эти заливки в переменную. Так что вот этот Subject = "Soccer". Все остальные входы работали (например, тема), но с этим другим. Если выбран Pete White, он не должен быть email = "[email protected]" email = "Pete White", но по email = "[email protected]".

Это, возможно, объяснило тихую неопределенность, но спасибо, что помогли мне :) Это может помочь, если у вас есть что-то визуальное:
Изображение 174551


* Это голландский, так что не против другого текста в изображении :)

Теги:
arrays
qt
combobox

2 ответа

0

Вы можете прочитать файл в QStringList и удалить или сохранить электронную почту, если это необходимо:

QFile file("path_to_file");
file.open(QIODevice::ReadOnly);
// reads file, splits it by newline symbol and puts it to qstringlist
QStringList list=QString(file.readAll()).split(QRegExp("[\r\n]"),QString::SkipEmptyParts);
for (int i=0;i<list.count();i++){
    list[i]=list[i].simplified(); // removing unneeded spaces inside string
    list[i].remove(list.at(i).section(" ",-1)); // removing word following the last space, where email is in example
    //(if email is needed, just store it somewhere before removing)
    // list.at(i).section(" ",-1) - email
    // list.at(i).section(" ",0,list.at(i).count()-1) -name and surname
}
file.close();

подробнее о разделе здесь

0

Вы не указали, поэтому я предполагаю, что этот файл имеет элементы фиксированной ширины, поэтому имя длиной 15 символов, а остальная часть строки - адрес электронной почты.

Теперь вы хотите прочитать файл, разделить строку, создать QPair<String, String> и поместить его в QList:

int main(int argc, char *argv[])
{
    QList<QPair<QString, QString> > lst;

    QFile inputFile("addresses.txt");

    if (inputFile.open(QIODevice::ReadOnly))
    {
       QTextStream in(&inputFile);
       while ( !in.atEnd() )
       {
          QString line = in.readLine();
          // use mid to split line - but you could use QString::split to split on character
          lst.append(qMakePair(line.mid(0, 15).trimmed(), line.mid(15).trimmed()));
       }
    }

    inputFile.close();


    for(int i=0; i< lst.count(); i++)
    {
        std::cout << "Name: " << qPrintable(lst[i].first) << " Address: " << qPrintable(lst[i].second) << std::endl;
    }


}
  • 0
    Я получаю ошибку: C2039: 'cout' : is not a member of 'std'
  • 0
    Вам нужно #include <iostream> .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню