Russian Qt Forum
Май 05, 2024, 05:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Алгоритм чтения из файла в динамический двумерный массив.  (Прочитано 25350 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #30 : Июнь 09, 2011, 22:39 »

это ж уже обсуждалось - надо читать файл чтоб он достиг конца, а тут указатель на позицию файла не меняется (всегда в начале находится)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Ovoshlook
Гость
« Ответ #31 : Июнь 09, 2011, 22:54 »

а. Вы про цикл While говорили мне? Я думал внутренний цикл -это который как раз таки for который находится внутри while.

Тогда почему у меня с файлом dat такое проходит???
Код:
   QFile file1("Test.dat");
 if   (file1.open(QIODevice::ReadOnly | QIODevice::Truncate | QIODevice::Text))
 {
     QDataStream in1(&file1);
    int i=0;

    while (!file1.atEnd())
    {
        for (int k=0;k<=2;k++)
        {
            GlobalVaribles::all.resize(i+1);
            GlobalVaribles::all[i].resize(3);
            in1>>GlobalVaribles::all[i][k];
            qDebug()<<GlobalVaribles::all[i][k];
        }
        for (int s=3;s<GlobalVaribles::all[i][1];s++)
        {
            GlobalVaribles::all[i].resize(3+GlobalVaribles::all[i][1]);
            in1>>GlobalVaribles::all[i][s];
            qDebug()<<GlobalVaribles::all[i][s];
        }
        ++i;
    }
    file1.close();

В нем все читается и все работает... Выгружаются все нужные мне данные по нужным правилам..

В первом посте у меня условие цикла было таким:

Код:
 QFile file2("Text.txt");
   if (file2.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream in2(&file2);
        int j=0;


        while (!file1.atEnd())
            {
                GlobalVaribles::QuestionAndAnswer.resize(j+1);
                GlobalVaribles::QuestionAndAnswer[j].resize(1);
                GlobalVaribles::QuestionAndAnswer[j][0]=in2.readLine();
                qDebug()<<GlobalVaribles::QuestionAndAnswer[j][0];
                for (int k=1;k=GlobalVaribles::all[j][1];k++)
                    {
                        GlobalVaribles::QuestionAndAnswer[j].resize(1+GlobalVaribles::all[j][1]);
                        GlobalVaribles::QuestionAndAnswer[j][k]=in2.readLine();
                        qDebug()<<GlobalVaribles::QuestionAndAnswer[j][k];

                    }
            ++j;
           
            }
            file2.close();

Но результат точно такой же был.
Так понимаю вы имеете ввиду то, что каретка не передвигается на следующую строку?
Тогда как мне ее передвинуть? Я искал способы перебора строк с помощью индексов на них, но так и не нашел честно говоря.

Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #32 : Июнь 09, 2011, 23:30 »

спрошу еще раз - зачем нужен режим QIODevice::Truncate для чтения файла? по-моему он используется только при записи файла. или я чего-то не знаю?

первый код (Test.dat) похож на правду (считывание строк есть).

внешний цикл - это while, а внутренний - for, ты все правильно понял. но посмотри на условие завершения внутреннего цикла (т.е. цикла for):
Код:
k=GlobalVaribles::all[j][1]
тут у тебя не сравнение больше/меньше, а просто присвоение. оно будет истинным во всех случаях кроме GlobalVaribles::all[j][1] == 0, а значит цикл никогда не завершится. если же будет нолик, то тело внутреннего цикла ни разу не выполнится и будет переход на следующую итерацию внешнего цикла.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #33 : Июнь 10, 2011, 00:55 »

Код:
        QTextStream in2(&file2);
        while (!file1.atEnd())
Я вижу что Вы читаете из file2 а условие выхода проверяете по file1 - должен быть бесконечный цикл. Вообще Вы умело/талантливо запутываете простейшие вещи  Улыбающийся

- QIODevice::Truncate | QIODevice::Text - не нужно привлекать посторонние детали надеясь что они решат Ваши проблемы, этого не произойдет

- столько раз написать GlobalVaribles:: может только "не ленивый программист"  Улыбающийся С++ настойчиво Вам говорит - это должен быть static метод GlobalVaribles, а не просто ф-ция

- если у Вас проблемы с чтением файла, то надо ими и заниматься, добившись сначала работы на "холостом ходу", т.е. все строки нормально читаются  и печатаются в консоли. Смешивая это с подробностями Вашей задачи Вы грузите форум бесполезной информацией и намного увеличиваете время разборок
Записан
Ovoshlook
Гость
« Ответ #34 : Июнь 10, 2011, 06:11 »

Цитировать
k=GlobalVaribles::all[j][1]
Шокированный
Блин... Как сразу не увидел...

Цитировать
QTextStream in2(&file2);
        while (!file1.atEnd())

Это опечатка так сказать) Исправлена давно, просто копировал с первого поста)

Цитировать
столько раз написать GlobalVaribles::

Да просто сама функция копирована с записи файла.. все никак не почищю) щас этим и займусь.

Цитировать
столько раз написать GlobalVaribles::
Это класс который содержит статические функции члены... Другого вызова таких членов без создния экземпляра класса я не знаю(


Кстаи пасибо все за советы. Заработало наконец) Видимо утро вечера мудренее все таки))
« Последнее редактирование: Июнь 10, 2011, 06:15 от Ovoshlook » Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.08 секунд. Запросов: 22.