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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2013, 21:20   #1
Миасс
Пользователь
 
Регистрация: 02.07.2013
Сообщений: 13
Вопрос запись из файла в структуры

Здравствуйте!у меня такая задача:есть существующий файл,в строках которого фамилия,имя,отчество,номер группы,оценки,причем фио от номера группы,номер группы от оценок,отделяются символом |.мне надо в новый файл записать только фио и номер группы,то есть без оценок.я долго мучаюсь с эти заданием(((как только ни пробовала-не получается.Вроде как это будет просто с помощью структур.то есть как мне записать в структуры отдельно фио,номер группы,оценки(получается,что дальше с этими структурами легче будет работать,хотя не знаю как)Помогите пожалуйста
Миасс вне форума Ответить с цитированием
Старый 07.07.2013, 21:49   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Продемонстрируйте Ваш код.
Igor95 вне форума Ответить с цитированием
Старый 07.07.2013, 22:02   #3
Миасс
Пользователь
 
Регистрация: 02.07.2013
Сообщений: 13
Восклицание не через структуры

данный код реализован не через структуры.идея здесь в том,если совпадает фио введенное с клавиатуры с фио из файла,то записать посимвольно в новый файл до второй черточки,то есть символа |.Но он не работает,просто переписывает весь исходный файл в новый.я замучилась с этим заданием уже.
Код:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string.h>
#include "locale.h"
using namespace std;
 
 
void main ()
{
    setlocale(LC_ALL, "Russian");
    system("cls");  // Очистка экрана
    
    char famil2[30];
    char imya2[30];
    char otchest2[30];
    char	nomer2[20];
    int i ,b=0;
	char j=0;
    char s[200];
	char dob[100];
	FILE *t, *nf;
    t = fopen("D:\\программирование\\прога\\tenis\\tenis\\student.txt", "rt+");//открываю исходный текстовый файл
    if(t == NULL)
    {
        printf("Ошибка при открытии файла.\n");
        system ("pause");
        exit(1);
    }
    
    nf = fopen ("stud.txt", "wt+");//создаю новый файл для перезаписи в него строк

 printf("Введите фамилию имя отчество студента через пробел: ");
 gets(dob);
 	
    while(feof(t)==NULL)
    { 
       fgets(s,200,t);
	   
	   while(j=!2)
	   {
		   if(s[i]=='|')
			   {j++;
		   i++;}
	   s[i+1]='\0';
		fputc(s[i],nf);
	   }

	   fputs(s,nf);

	   
	 break;
	}
	
	
	 fclose(t);
	 fclose(nf);
			
    
}
Миасс вне форума Ответить с цитированием
Старый 07.07.2013, 22:11   #4
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

С++:
Код:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

struct Data
{
    char FirstName[100];
    char LastName[100];
    char Patronymic[100];
    int GroupNumber;
    vector<int> Evaluations;
};

int main()
{
    ifstream Read("File.txt");
    if (!Read)
    {
        cout << "Cannot open file" << endl;
        system("PAUSE");
        return 1;
    }
    // Read data
    Data data;
    char Separator;
    Read >> data.FirstName;
    Read >> data.LastName;
    Read >> data.Patronymic;
    Read >> Separator;
    Read >> data.GroupNumber;
    Read >> Separator;
    while (!Read.eof())
    {
        int ReadEvaluation = 0;
        Read >> ReadEvaluation;
        data.Evaluations.push_back(ReadEvaluation);
    }
    Read.close();
}
Вот принципе всё. Дальше делайте с этой структурой всё что вам надо. Этот код работает, если в файле находится только 1 запись. Вам теперь надо немного изменить данный код.

Я не стал писать его для нескольких записей т.к. вы не указали как разделяются между собой записи в файле. Например:

1:
Фамилия Имя Отчество | 608 | 5 4 5 4 5 4
Фамилия Имя Отчество | 608 | 5 4 5 4 5 4
2:
Фамилия Имя Отчество | 608 | 5 4 5 4 5 4 Фамилия Имя Отчество | 608 | 5 4 5 4 5 4

Да и кстати вы не указали как именно разделяются данные:
Так:
Фамилия Имя Отчество | 608 | 5 4 5 4 5 4
или так:
Фамилия Имя Отчество|608|5 4 5 4 5 4
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 07.07.2013, 22:16   #5
Миасс
Пользователь
 
Регистрация: 02.07.2013
Сообщений: 13
По умолчанию

скажите пожалуйста,а как реализовать это не через потоки?я не использовала в своей проге(а она у меня большая уже)ifstream ofstream.данные записаны так: фамилия имя отчество | номер группы(12 например) | 5 | 4 | 5 |
cd ef gh | 45 | 4 | 5 |
qw er rt | 45 | 5 | 5 |
Миасс вне форума Ответить с цитированием
Старый 07.07.2013, 22:17   #6
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Цитата:
Сообщение от Миасс Посмотреть сообщение
данный код реализован не через структуры.идея здесь в том,если совпадает фио введенное с клавиатуры с фио из файла,то записать посимвольно в новый файл до второй черточки,то есть символа |.Но он не работает,просто переписывает весь исходный файл в новый.я замучилась с этим заданием уже.
Надо открывать файл для записи данных в его конец. Затем необходимо найти нужный байт записи и уже изменять данные с этого байта.

Без структур тут наверно будет сложновато сделать.

Да вы не уточнили язык программирования. По вашему коду это С, но
Код:
#include <iostream> 
using namespace std;
говорит что это C++.

Да и зачем вам #include <Windows.h>?
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 07.07.2013, 22:18   #7
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Цитата:
Сообщение от Миасс Посмотреть сообщение
скажите пожалуйста,а как реализовать это не через потоки?я не использовала в своей проге(а она у меня большая уже)ifstream ofstream.данные записаны так: фамилия имя отчество | номер группы(12 например) | 5 | 4 | 5 |
cd ef gh | 45 | 4 | 5 |
qw er rt | 45 | 5 | 5 |
В смысле не через потоки? На языке СИ нужно? Да и в мой код в конец цикла надо добавить Read >> Separator;
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 07.07.2013, 22:19   #8
Миасс
Пользователь
 
Регистрация: 02.07.2013
Сообщений: 13
По умолчанию

это просто измененная программа,я оставила в ней все заголовки.
Миасс вне форума Ответить с цитированием
Старый 07.07.2013, 22:21   #9
Миасс
Пользователь
 
Регистрация: 02.07.2013
Сообщений: 13
По умолчанию

да.на Си надо
Миасс вне форума Ответить с цитированием
Старый 07.07.2013, 22:24   #10
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Ну тогда ждите другого программиста. Я в СИ не особо сильно соображаю. Просто программирование начал учить с С++.
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись структуры из файла Evgeniy21 Общие вопросы C/C++ 2 15.05.2012 13:54
Запись структуры в файл. Farrel Общие вопросы C/C++ 4 12.04.2011 20:32
Запись структуры в конец файла Ozerich Общие вопросы C/C++ 0 03.05.2010 23:10
Запись структуры и чтение из файла [MI_nor] Общие вопросы C/C++ 6 08.04.2009 15:52