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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2014, 13:37   #1
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию Создание таблицы в файле

Здравствуйте.
Может ли кто-нибудь подсказать какую-нибудь библиотеку? Никаких сложностей, простейшая таблица в обычном текстовом файле, вроде такого:
Код:
          | колонка1       | колонка2       | колонка3
--------------------------------------------------------
строка1   |                |                |
--------------------------------------------------------
строка2   |                |                |
--------------------------------------------------------
строка3   |                |                |
С возможностью редактирования определенного поля.
220Volt вне форума Ответить с цитированием
Старый 25.07.2014, 14:08   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это не трудно и стандартными средствами сделать...зачем библиотеку?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.07.2014, 14:16   #3
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
это не трудно и стандартными средствами сделать...зачем библиотеку?
Ведь столбцы растут по вертикали. Я думаю над самодельным решением, сильно простого решения в голову не приходит.
220Volt вне форума Ответить с цитированием
Старый 25.07.2014, 14:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-то типа:
Код:
// ff.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <string>

int _tmain(int argc, _TCHAR* argv[])
{
	FILE* f=fopen("d:\\1\\q.txt","w");
	char s[3][20]={"колонка1","колонка2","колонка3"};
	int k,j,i,l=0;
	for(i=0;i<3;i++){ fprintf(f,"|%30s",s[i]); l+=30+std::strlen(s[i]);} fprintf(f,"\n");
	for(i=0;i<l;i++) fprintf(f,"-");fprintf(f,"\n");

	char s2[3][3][20]={{"Строка1","",""},{"Строка2","",""},{"Строка3","",""}};
	for(i=0;i<3;i++){
			for(j=0;j<3;j++) fprintf(f,"|%30s",s2[i][j]); fprintf(f,"\n");
			for(k=0;k<l;k++) fprintf(f,"-");fprintf(f,"\n");
			
	}
	fclose(f);
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.07.2014, 14:42   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от 220Volt Посмотреть сообщение
Ведь столбцы растут по вертикали. Я думаю над самодельным решением, сильно простого решения в голову не приходит.
однако запись идет построчно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.07.2014, 14:51   #6
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Спасибо за пример.
Я думаю написать сам смогу. Но хочется этого избежать, потому и заговорил о библиотеке.

Мне нужна полноценная таблица: сохранение в файл, чтение, редактирование. Свой велосипед получится объемным.
220Volt вне форума Ответить с цитированием
Старый 25.07.2014, 15:15   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Мне нужна полноценная таблица: сохранение в файл, чтение, редактирование.
Кажется в ODBC есть провайдер работающий с таблицами в виде текста.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2014, 06:26   #8
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Написал сам.
Код:
// table.h
#pragma once
#include <list>
#include <string>


class Table
{
public:
    struct Cell
    {
        std::wstring text;
         // Ширину всего столбца задаёт самая верхняя ячейка, в
         // остальных ячейках значение игнорируется.
        unsigned width;
    };
    Table(void);
    Table(const std::wstring &table);
     // Количество строк.
    size_t line_cnt(void)const;
     // Количество столбцов.
    size_t column_cnt(void)const;
     // Если ячейка не найдена, то возвращается nullptr.
    Cell *get_cell(size_t column, size_t line);
    Cell *get_cell(const wchar_t *column, const wchar_t *line);
    Cell *get_cell(size_t column, const wchar_t * line);
    Cell *get_cell(const wchar_t *column, size_t line);
     // Если width == 0, то ширину столбца задаёт ширина title.
    void add_column(const wchar_t *title, unsigned width = 0);
     // Добавить строку можно только при наличии хотя бы одного столбца.
    void add_line(const wchar_t *title);
     // shift задаёт смещение таблицы от левого края.
    std::wstring get_table(unsigned shift);
private:
    std::list<Cell> table;
    size_t clmn_cnt;
};
Код:
// Пример
#include <fstream>
#include <iterator>
#include "table.h"

int main()
{
    Table table;
    std::wfstream file("table.txt");
    if(file.is_open())
    { // Загружаем тиблицу из файла.
        std::wstring str_table = std::wstring(std::istreambuf_iterator<wchar_t>(file),
                                              std::istreambuf_iterator<wchar_t>()
                                             );
        table = Table{str_table};
        file.close();
    }
    else
    { // Создаём новую.
        table.add_column(L"clolumn_1");
        table.add_column(L"clolumn_2", 14);
        table.add_column(L"clolumn_3");
        table.add_column(L"clolumn_4", 20);
        table.add_line(L"line_1");
        table.add_line(L"line_2");
        table.add_line(L"line_3");
        auto cell = table.get_cell(L"clolumn_2", L"line_1");
        if(cell)
            cell->text = L"Position of the first character in str that is copied to the object as a substring.";
        cell = table.get_cell(2, 3);
        if(cell)
            cell->text = L"Hello world!!";
    }
    file.open("table.txt", std::ios_base::out | std::ios_base::trunc);
    file << table.get_table(5);

    return 0;
}
В итоге получаем таблицу (с возможность открыть из файла и работать с ней):
Код:
     +---------+--------------+---------+--------------------+
     |clolumn_1|clolumn_2     |clolumn_3|clolumn_4           |
     +---------+--------------+---------+--------------------+
     |line_1   |Position of th|         |                    |
     |         |e first charac|         |                    |
     |         |ter in str tha|         |                    |
     |         |t is copied to|         |                    |
     |         | the object as|         |                    |
     |         | a substring. |         |                    |
     +---------+--------------+---------+--------------------+
     |line_2   |              |         |                    |
     +---------+--------------+---------+--------------------+
     |line_3   |              |Hello wor|                    |
     |         |              |ld!!     |                    |
     +---------+--------------+---------+--------------------+
Во вложении находится table.cpp
Вложения
Тип файла: zip table.zip (1.5 Кб, 107 просмотров)
220Volt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание таблицы ts-alan C# (си шарп) 5 09.08.2013 19:05
[C++] Создание дерева, хранящегося в xml файле branbranzor Помощь студентам 0 19.05.2012 08:57
Создание таблицы vvvd Microsoft Office Excel 15 08.04.2012 19:58
Создание первичных индексов в db файле paradox7 Nikolay88_x C/C++ Базы данных 2 10.01.2012 20:59
Создание шапки в файле s070308 Microsoft Office Excel 0 30.03.2009 11:05