crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Есть ли в Qt видоизмененный QMap, тогда не надо будет изобретать велосипед
AD
  опции профиля:
сообщение 18.8.2008, 13:24
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 18.8.2008, 14:14) *
я бы два словаря использовал:
QMap<QString, QString> - m/s = м/с
QMap<QString, double> - m/s = 1

Красиво, я бы сказал, элегантное решение, но ресурсоемкое! Два мепа. Я подумаю, может быть, где-то твой вариант будет очень хорошо подходить! Еще раз огромное спасибо обоим! :) :) :) А в данном случае решение выглядит так. Вроде бы неплохо, тоже:

bool MetricReader::TRead()
{
    bool ret = false;
    if(!open()) return ret;

    QTextStream in(file);
    QString rc= "";
    while(!in.atEnd())
    {
        rc = in.readLine().simplified();
        if(rc.find("//") != -1 || rc.isEmpty()) continue;

        insertValue(rc);
    }

    ret = true;

    QFile* fl = new QFile("test.txt");
    fl -> open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
    QTextStream in1(fl);
    for(QMap<QString, double>::iterator iter=metric_map.begin(); iter!=metric_map.end(); ++iter)
        in1 << iter.key() << ":\t\t" << iter.value() << endl;
    fl -> close();

    return ret;
}

void MetricReader::insertValue(QString& rc)
{
    QString left = rc.simplified().section("=", 0, 0).simplified().trimmed();
    QString left_subleft = left.section("|", 0, 0).simplified().trimmed();
    QString right_subleft = left.section("|", 1, 1).simplified().trimmed();

    QString right = rc.simplified().section("=", 1, 1).simplified().trimmed();        bool ok;
    double value = right.toDouble(&ok);

    metric_map.insert(left_subleft, value);
    if(left_subleft != right_subleft)
        metric_map.insert(right_subleft, value);
}


В результате получилось такое:
1:        1
1/km:        0.001
1/км:        0.001
DDM:        11.429
_km:        1
_км:        1
h:        0.017
km:        1000
km/h:        3.6
m:        1
m/s:        1
minute:        1
s:        60
°:        1
РГМ:        11.429
км:        1000
км/ч:        3.6
м:        1
м/с:        1
минут:        1
с:        60
ч:        0.017


P.S. Про нормальную форму теперь понятно! :) Как видно из кода, это делается сразу!

Сообщение отредактировал AD - 18.8.2008, 13:25
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 18.8.2008, 15:40
Сообщение #12


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Цитата(AD @ 18.8.2008, 13:40) *
А если серьезно, то для того, чтобы разобрать этот файл:

А почему такой дурацкий формат у файла? csv тут блин намного правильнее использовать...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.8.2008, 8:58
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(trdm)
А почему такой дурацкий формат у файла? csv тут блин намного правильнее использовать...

Так задано, что все входные файлы должны быть формата *.ini!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


9 чел. читают эту тему (гостей: 9, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.1.2025, 16:55