Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2010, 13:07   #1
DarkSwan
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 20
По умолчанию Преобразование текстового файла в массив

Здравствуйте. Дан txt файл со следующей информацией: индекс группы, фамилия студента с его инициалами, оценки по 4 экзаменам и 5 зачетам (зачет/незачет). Разработать программу, выводящую фамилии студентов, у которых есть 2 или незачеты с указанием индексов групп и вида задолженности; средний балл каждого студента. Разработать интерфейс в виде меню из нескольких пунктов.
Главный вопрос! Как разбить строку из текстового файла с информацией о студенте, чтобы в последствии работать с данными раздельно? Я так понимаю, надо строку поделить на отдельные элементы, сформировать массив. На парах такого не проходили, не знаю, за что хвататься... Последними темами были структуры и чтение целой строки фалового ввода. Вот мои наброски:

Код:
#include "stdafx.h"
#include "iostream.h"
#include "fstream.h"
#include "stdio.h"
#include "conio.h"

int j,i,k;
char gr[20][10],sn[20][30],ex[20][9]; //èíäåêñû ãðóïï, ôàìèëèè, ýêçàìåíû/çà÷åòû (âñåãî 9)

void main(void)
{
Nach:printf("Vvedite nomer punkta:\n");
	printf("1. Pokazat' spisok vseh studentov\n");
	printf("2. Pokazat' dolzhnikov\n");
	printf("3. Pokazat' otlichnikov\n");
	printf("4. Pokazat' srednii ball studentov\n");
	printf("5. Vyhod\n\n");
	j=getch();	//÷èòàåì ASCII-êîä íàæàòîé êëàâèøè

	ifstream input_file("Base.txt");
	char line[64],word[64];

	switch(j) 
	{
	case 49:	//íàæàëè 1
		printf("===========================Spisok studentov===========================\n"); //âñå ñòóäåíòû
		while (!input_file.eof())
		{
			input_file.getline(line,sizeof(line));
			cout << line << endl;
		}
	printf("\n\n");
	goto Nach;
	case 50:	//íàæàëè 2
		printf("===========================Spisok dolzhnikov==========================\n"); //äîëæíèêè
		while (!input_file.eof())
		{
			struct student
			{
			char group[64],surname[64],name[64];
			int ekz1,ekz2,ekz3,ekz4;
			char za1,za2,za3,za4,za5;
			};
			
//			input_file >> word;
//			cout << word << endl;

		}
		
	printf("\n\n");	
	goto Nach;
	case 51:	//íàæàëè 3
		printf("==========================Spisok otlichnikov==========================\n"); //îòëè÷íèêè
		
	printf("\n\n");	
	goto Nach;
	case 52:	//íàæàëè 4
		printf("==============================Srednii ball============================\n"); //ñðåäíèé áàëë
		
	printf("\n\n");	
	goto Nach;
	case 53:	//íàæàëè 5
		printf("======================Dlya vyhoda nazhmite CTRL+C=====================\n\n"); //âûõîä
	}
	getch();
}
Файл, из которого производится чтение http://rghost.ru/download/2915849/94...6330b/Base.txt
DarkSwan вне форума Ответить с цитированием
Старый 14.10.2010, 13:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю считывать поэлементно а не сразу всю строку:
Код:
    char gr[5],f[100],io[100],z[5];
    int q,w,e,r;
    ifstream ifile("c:\\temp\\Base.txt");
    while(!ifile.eof()){
        ifile>>gr>>f>>io>>q>>w>>e>>r>>z[0]>>z[1]>>z[2]>>z[3]>>z[4];
        cout<<gr<<f<<io<<q<<w<<e<<r<<z[0]<<z[1]<<z[2]<<z[3]<<z[4]<<'\n';
    };
    ifile.close();
char gr[5],f[100],io[100],z[5]; int q,w,e,r; - Это те самые поля, принимающие значения из строки файла. ifstream сам разберется, в какую переменку что пихать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2010, 17:01   #3
DarkSwan
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 20
По умолчанию

А есть еще какой-нибудь способ? Если делать так, как написали вы, то в последствии работа идет только с самой последней строкой почему-то... В дополнение к коду в первом посте:
Код:
	case 50:	//нажали 2
		printf("===========================Spisok dolzhnikov==========================\n"); 
		char gr[20][5],surname[20][64],name[20][16],z[20][5];
		int ekz[20][4];
		while(!input_file.eof())
		{
		  input_file>>gr[s]>>surname[s]>>name[s]>>ekz[s][0]>>ekz[s][1]>>ekz[s][2]>>ekz[s][3]>>z[s][0]>>z[s][1]>>z[s][2]>>z[s][3]>>z[s][4];
		  cout<<gr[s]<<surname[s]<<name[s]<<ekz[s][0]<<ekz[s][1]<<ekz[s][2]<<ekz[s][3]<<z[s][0]<<z[s][1]<<z[s][2]<<z[s][3]<<z[s][4]<<'\n';
		}
		for (s=0;s<20;s++)
		{
			for (k=0;k<5;k++)
			{
			if (ekz[s][k]>0&&ekz[s][k]<3||z[s][k]=='n') printf("%s %s %s ", gr[s],surname[s], name[s]);//если что-то не сдано, выводим группу и ФИО
			{
				for (k=0;k<5;k++)
				{
					if (ekz[s][k]<3&&ekz[s][k]>0) printf("ekz.%d ",k+1,ekz[s][k]);	//отмечаем несданные экзамены
					if (z[s][k]=='n') printf("z.%d ",k+1,z[s][k]);					//и зачеты
				}
			}
		}}
			printf("\n\n");	
	goto Nach;
DarkSwan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из текстового файла в бд!!! Poltev86 БД в Delphi 5 16.05.2010 23:18
Считывание из текстового файла PlumBoom Общие вопросы C/C++ 8 21.03.2010 20:41
Кодирование текстового файла milate Паскаль, Turbo Pascal, PascalABC.NET 2 24.03.2009 13:00
Ввод из текстового файла bygoga Паскаль, Turbo Pascal, PascalABC.NET 14 23.11.2008 13:37
Открытие текстового файла Victor Microsoft Office Excel 2 16.01.2008 03:42