Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гаряка Асмик
Статус: Специалист
Рейтинг: 3567
∙ повысить рейтинг »
lamed
Статус: Бакалавр
Рейтинг: 2541
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2291
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1529
Дата выхода:14.05.2010, 12:00
Администратор рассылки:Verena, Профессионал
Подписчиков / экспертов:442 / 164
Вопросов / ответов:1 / 1
IRC-канал по теме:#C

Вопрос № 178267: Нужно реализовать чтение из файла, по тому принципу, по которому он сохраняется const int N=3; void SaveToFile(MyList *mylist) { ofstream fp; ITEM *CurrentItem; fp.open("country.txt"); for (int i=0;i<myli...



Вопрос № 178267:

Нужно реализовать чтение из файла, по тому принципу, по которому он сохраняется

const int N=3;

void SaveToFile(MyList *mylist)
{
ofstream fp;
ITEM *CurrentItem;
fp.open("country.txt");
for (int i=0;i<mylist->Count;i++)
{
fp << mylist->list[i].Name << ' ';
CurrentItem=mylist->list[i].HeadItem->Next;
while(CurrentItem!=NULL)
{
fp << CurrentItem->Name << ' ';
fp << CurrentItem->Number << '|';
CurrentItem=CurrentItem->Next;
}
fp << '\n';
}
fp.close();
}

Получается так
//country.txt
windows xp 1000|vista 2000|seven 3000|
web html 1000|xml 2000|php 3000|


void LoadFromFile(MyList *mylist)
{
NumberOfString = нужно определить сколько в файле строк
i=0;
while (i<N && i<NumberOfString)
{
обрабатывем первую строку
первое сло во присваемаем к mylist->list[i].Name,
while(пока не дошли до конца строки '\n')
{
здесь два элемента слово и число
CurrentItem->Name << ' ' << CurrentItem->Number << '|';
}
i++;
}
}

Отправлен: 07.05.2010, 11:42
Вопрос задал: prolang, 1-й класс
Всего ответов: 1
Страница вопроса »


Отвечает lamed, Бакалавр :
Здравствуйте, prolang!
Поскольку в свободном доступе тестирующего модуля нет, я позволил себе некоторые упрощения. Вместо динамического списка используется статический массив, соответственно, в структуру потребовалось внести номер последней пары списка. Code::Blocks/G++.

Код:
#include
<iostream>
#include <fstream>
#include <string>
using namespace std;

const int items=10;
struct TPair
{
string name;
int value;
};

struct TMyList
{
string key;
int last_pair;
TPair pairs[items];
};

int main()
{
const int n=100;
string line;

TMyList ml[n];
int status;
size_t found;

ifstream in("in");
if (!in)
{
cerr << "Unable to read from this file" << endl;
system("Pause");
exit(1);
}


int i=-1;
int j;
status = 0; // Новая строка массива
while (in >> line)
{
if (status == 0)
{
i++;
ml[i].key = line;
status = 1;
j = 0;
}
else
{
found = line.find("|");
if (found == -1) // Нет символа | в строке названия
ml[i].pairs[j].name = line;
else
{
// Преобразуем строку цифр в целое число
int num = 0;
for (int k=0; k<found; k++)
num = num*10+line[k]-'0';

ml[i].pairs[j].value = num;
if (found == line.length()-1) // Значение послед ней пары в строке
{
status = 0; // Новая строка
ml[i].last_pair = j;
}
else
{
ml[i].pairs[++j].name = line.substr(found+1);
// Продолжаем список пар в текущей строке
}
}
}
}

in.close();

// Распечатаем массив
for (int outer=0; outer<=i; outer++)
{
cout << ml[outer].key << " ";
for (int inner=0; inner<=ml[outer].last_pair; inner++)
{
cout << ml[outer].pairs[inner].name << " ";
cout << ml[outer].pairs[inner].value << " ";
}
cout << endl;
}

system("pause");
return 0;
}

Ответ отправил: lamed, Бакалавр
Ответ отправлен: 13.05.2010, 13:21
Номер ответа: 261368

Оценка ответа: 5
Комментарий к оценке:
другого ответа просто не будет

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261368 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.03.2010

    В избранное