Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Чтение с текстового файла


Автор: maxfol 28.3.2012, 22:07
Есть текстовой файл с данными о результатах матча (2:2 1:3 3:1 и тд.). Я считываю каждые 10 результатов в массив (или int или char, такие условия). Каким образом я могу разделить эти данные (получить кол-во забитых мячей домашней команды и гостей) что бы потом с ними что то сделать...
Или как вариант, во время считывания данных разбить их, и закинуть в два разных массива.... Заранее спасибо, и если можно ответы поподробнее, а то теория чутка страдает...  smile

Автор: Cheloveck 29.3.2012, 00:15
Код

#include <cstdio>

int main()
{
    FILE * file = fopen("file.txt", "r");
    int x, y;
    while(fscanf(file, "%d:%d", &x, &y) > 0) {
        printf("First = %d, Second = %d\n", x, y);
    }
    fclose(file);
    return 0;
}

Автор: ambler 29.3.2012, 15:36
В стиле C++:
Код

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

class CScore
{
public:
    CScore(int sc1, int sc2){score1 = sc1; score2 = sc2;}
    int score1;
    int score2;
    friend ostream& operator<<(ostream& os, const CScore sc){ return os << sc.score1 << " : " << sc.score2; }
};

void printScores(CScore sc)
{
    cout << sc << endl;
}

void redFile(string fileName)
{
    fstream file;
    vector<CScore> AllScores;

    file.open(fileName.c_str());
    int score1 = 0, score2 = 0;
    char delimiter;
    while (!file.eof())
    {
        file >> score1 >> delimiter >> score2;
        //cout << score1 << " : " << score2 << endl;
        AllScores.push_back(CScore(score1, score2));
    }
    file.close();

    for_each(AllScores.begin(), AllScores.end(), printScores);

}


int main()
{
    redFile("D:\\1.txt");
    return 0;
}



Файл 1.txt
Код

2:2 1:3 3:1

Автор: baldina 29.3.2012, 18:30
если есть строка вида "xxx:yyy", то разделить её на две по разделителю ':' можно так:
в C
Код

char str[] = "xxx:yyy";
char *left = strtok (str,":");
char *right = strtok (NULL,":");

в С++
Код

std::string str = "xxx:yyy";
size_t pos = str.find(':');
std::string left = str.substr(0, pos);
std::string right = str.substr(pos+1);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)