Re[3]: Проблемы со считыванием структуры из файла
От: Кодт Россия  
Дата: 17.01.08 13:03
Оценка: 12 (2)
Здравствуйте, falcon8, Вы писали:

F>если было хоть какое-нибудь разделение вопроса не было б есть только размер и набор символьных строк

Строк в "общечеловеческом" понимании, но не в сишном.

Тебе что, сложно превратить массив символов в строку? Ай, как нефиг делать!
// 1234556909809.01.444443356784532
// \___________/ \/ \_____________/
//       a       b         c
#pragma pack(push,1)
struct FileRecord // только для чтения-записи в файл
{
    char a[13], dummy1, b[2], dummy2, c[15];
};
#pragma pack(pop)

// немножко по мотивам буста
template<class T, int N> T* begin(T(&arr)[N]) { return arr+0; }
template<class T, int N> T* end  (T(&arr)[N]) { return arr+N; }

template<class I, class J, class T> void copy_and_fill(I i, I ie, J j, J je, T v)
{
    for( ; i!=ie && j!=je; ++i, ++j)
        *je = *ie;
    for( ; j!=je; ++j)
        *j = v;
}

struct Record // для работы
{
    std::string a, b, c;
    
    Record(const FileRecord& src)
        : a(begin(src.a), end(src.a))
        , b(begin(src.b), end(src.b))
        , c(begin(src.c), end(src.c))
    {}
    
    void export(FileRecord& dst) const
    {
        copy_and_fill(a.begin(), a.end(), begin(dst.a), end(dst.a), ' ');
        dst.dummy1 = '.';
        copy_and_fill(b.begin(), b.end(), begin(dst.b), end(dst.b), ' ');
        dst.dummy2 = '.';
        copy_and_fill(c.begin(), c.end(), begin(dst.c), end(dst.c), ' ');
    }
};
inline std::ostream& operator << (std::ostream& ost, Record const& rec)
{
    ost << "{ ";
    ost << "\"" << rec.a << "\"" << ", ";
    ost << "\"" << rec.b << "\"" << ", ";
    ost << "\"" << rec.c << "\"";
    ost << " }";
    return ost;
}
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.