Console spreadsheet для PascalABC.Net

Материал из Викиучебника — открытых книг для открытого мира

Введение в рисование таблиц при помощи модуля «Console_spreadsheet - 0.01 version» в PascalACB.Net[править]

Планируемое[править]

Планируется добавить функции в модуль:

  • анимация перемещения таблиц (2 символа в секунду)
  • возможности:
    • скрывать значения конкретных ячеек;
    • переворачивать значения ячеек;
  • работать сразу с несколькими таблицами
  • создавать глобальные таблицы с возможностью перемещения от одной части таблицы к другой

Введение[править]

Код модуля для рисования табличек в консольных приложениях, написанных на PascalABC.Net:

// код не изменять, сам его писал
//Unit Console_spreadsheet
//Interface
uses
    CRT;

var
    Graph_color, Graph_mode: string;
    Start3, current_X_ceil_adress, current_Y_ceil_adress, start2, start, spreadsheet_max_size_X: integer;
    spreadsheet_max_size_Y: integer;
    symbol: string;
    grid: boolean;
    spreadsheet_max_size_Y_read,spreadsheet_max_size_X_read,Max_value_in_column, SHIFT, current_spreadsheet_column_size: integer;
    current_spreadsheet_ceil_string_coordinate: integer;
    current_spreadsheet_ceil_column_coordinate:integer ;
    current_spreadsheet_background_color: string;
    current_spreadsheet_ceil_content, current_spreadsheet_border_color, current_spreadsheet_text_color: string;
    string_spreadsheet: array[0..80, 0..80] of string;
    Max_values_in_spreadsheet: array[0..80] of integer;
    spreadsheet_type: string;

procedure Console_spreadsheet_set_background_color(current_spreadsheet_background_color: string);
begin
    if (current_spreadsheet_background_color = 'red') then CRT.TextBackground(red);
    if (current_spreadsheet_background_color = 'blue') then CRT.TextBackground(blue);
    if (current_spreadsheet_background_color = 'yellow') then CRT.TextBackground(yellow);
    if (current_spreadsheet_background_color = 'green') then CRT.TextBackground(green);
    //if (current_spreadsheet_background_color='orange') then CRT.TextBackground(orange);
    if (current_spreadsheet_background_color = 'black') then CRT.TextBackground(black);
    if (current_spreadsheet_background_color = 'white') then CRT.TextBackground(white);
    if (current_spreadsheet_background_color <> 'red') or (current_spreadsheet_background_color <> 'blue') or (current_spreadsheet_background_color <> 'yellow') or (current_spreadsheet_background_color <> 'green') or (current_spreadsheet_background_color <> 'orange') or (current_spreadsheet_background_color <> 'black') or (current_spreadsheet_background_color <> 'white') then begin CRT.TextBackground(white); CRT.TextColor(Black); WriteLn('Function parameter «Console_spreadsheet_set_baxkground» receives an invalid value.'); end;
end;

procedure Console_spreadsheet_set_text_color(Console_spreadsheet_text_color: string);
begin
    if (current_spreadsheet_text_color <> 'red') or (current_spreadsheet_text_color <> 'blue') or (current_spreadsheet_text_color <> 'yellow') or (current_spreadsheet_text_color <> 'green') or (current_spreadsheet_text_color <> 'orange') or (current_spreadsheet_text_color <> 'black') or (current_spreadsheet_text_color <> 'white') then begin CRT.TextBackground(white); CRT.TextColor(Black);WriteLn('Function parameter «Console_spreadsheet_set_text_color» receives an invalid value.'); end;
end;

procedure Console_spreadsheet_set_border_color(current_spreadsheet_border_color: string);
begin
    if (current_spreadsheet_border_color <> 'red') or (current_spreadsheet_border_color <> 'blue') or (current_spreadsheet_border_color <> 'yellow') or (current_spreadsheet_border_color <> 'green') or (current_spreadsheet_border_color <> 'orange') or (current_spreadsheet_border_color <> 'black') or (current_spreadsheet_border_color <> 'white') then begin CRT.TextBackground(white); CRT.TextColor(Black); WriteLn('Function parameter «Console_spreadsheet_set_border_color» receives an invalid value.'); end;
end;

procedure Console_spreadsheet_hide_grid();
begin
    grid := false;
end;

procedure Console_spreadsheet_show_grid();
begin
    grid := true;
end;

{procedure Console_spreadsheet_adding_values_method_SHIFT(SHIFT: integer; symbol: string);
begin
    Method := 1;
end;}

function Console_spreadsheet_set_size_for_X_axis(spreadsheet_max_size_X: integer):integer;
begin
return spreadsheet_max_size_X;
end;

function Console_spreadsheet_set_size_for_Y_axis(spreadsheet_max_size_Y: integer):integer;
begin
return spreadsheet_max_size_Y;
end;

procedure Console_spreadsheet_set_ceil_content(current_spreadsheet_ceil_string_coordinate: integer; current_spreadsheet_ceil_column_coordinate: integer; current_spreadsheet_ceil_content: string);// доделать
begin
    if (current_spreadsheet_ceil_string_coordinate > spreadsheet_max_size_X) or (current_spreadsheet_ceil_column_coordinate > spreadsheet_max_size_Y) then
    begin
    WriteLn('Values coordinates ',current_spreadsheet_ceil_string_coordinate,current_spreadsheet_ceil_column_coordinate);
        WriteLn('Values max coordinates ',spreadsheet_max_size_X,spreadsheet_max_size_Y);

        CRT.TextBackground(white); CRT.TextColor(Black); WriteLn('The cell is outside the table.');
    end
    Else
    begin
        string_spreadsheet[current_spreadsheet_ceil_string_coordinate, current_spreadsheet_ceil_column_coordinate] := current_spreadsheet_ceil_content;
    end;
    current_spreadsheet_ceil_string_coordinate := 0;
    current_spreadsheet_ceil_column_coordinate := 0;
    // сбор макс. значений таблицы в столбцах
    // begin
    for var start := 1 to spreadsheet_max_size_X do
    begin
        
        for var start2 := 1 to spreadsheet_max_size_Y do
        begin
            if (Length(string_spreadsheet[current_spreadsheet_ceil_string_coordinate, current_spreadsheet_ceil_column_coordinate]) > Max_value_in_column) then begin Max_value_in_column := length(string_spreadsheet[current_spreadsheet_ceil_string_coordinate, current_spreadsheet_ceil_column_coordinate]); current_spreadsheet_ceil_column_coordinate := current_spreadsheet_ceil_column_coordinate + 1; end else begin current_spreadsheet_ceil_column_coordinate := current_spreadsheet_ceil_column_coordinate + 1; end;
        end;
        Max_values_in_spreadsheet[current_spreadsheet_ceil_string_coordinate] := Max_value_in_column;
        current_spreadsheet_ceil_string_coordinate := current_spreadsheet_ceil_string_coordinate + 1;
    end;
    // end
    // вывод таблицы
    current_spreadsheet_ceil_string_coordinate := 0;
    current_spreadsheet_ceil_column_coordinate := 0;
    for var start := 1 to spreadsheet_max_size_Y do
    begin
        // тут остановился
        
        for var start2 := 1 to spreadsheet_max_size_X do
        begin// здесь
            // назначение цвета для вывода значния ячейки
            
            if (current_spreadsheet_text_color = 'red') then CRT.TextColor(red);
            if (current_spreadsheet_text_color = 'blue') then CRT.TextColor(blue);
            if (current_spreadsheet_text_color = 'yellow') then CRT.TextColor(yellow);
            if (current_spreadsheet_text_color = 'green') then CRT.TextColor(green);
            //if (current_spreadsheet_text_color = 'orange') then CRT.TextColor(orange);
            if (current_spreadsheet_text_color = 'black') then CRT.TextColor(black);
            if (current_spreadsheet_text_color = 'white') then CRT.TextColor(white);
            // назначение цвета для вывода значния ячейки - end
            
            // вывод значения ячейки
            Write(string_spreadsheet[current_spreadsheet_ceil_string_coordinate, current_spreadsheet_ceil_column_coordinate]);
            // вывод значения ячейки
            
            // вывод пробелов до столбца
            for var start3 := 1 to Max_values_in_spreadsheet[current_spreadsheet_ceil_string_coordinate] do
            begin
                Write(' ');
            end;
            // вывод пробелов до столбца - end
            
            // установка цвета столбца
            if (current_spreadsheet_border_color = 'red') then CRT.TextColor(red);
            if (current_spreadsheet_border_color = 'blue') then CRT.TextColor(blue);
            if (current_spreadsheet_border_color = 'yellow') then CRT.TextColor(yellow);
            if (current_spreadsheet_border_color = 'green') then CRT.TextColor(green);
            //if (current_spreadsheet_border_color = 'orange') then CRT.TextColor(orange);
            if (current_spreadsheet_border_color = 'black') then CRT.TextColor(black);
            if (current_spreadsheet_border_color = 'white') then CRT.TextColor(white);
            // установка цвета столбца - end
            Write('|');
            current_spreadsheet_ceil_string_coordinate := current_spreadsheet_ceil_string_coordinate + 1;
        end;
        // вывод линейки
        for var start3 := 1 to spreadsheet_max_size_X do
        begin
            for var start4 := 1 to Max_values_in_spreadsheet[current_spreadsheet_ceil_string_coordinate] do
            begin
                Write('-');
            end;
            Write('+');
        end;
        // вывод линейки - end
        // Переход к следующей строке
        current_spreadsheet_ceil_column_coordinate := current_spreadsheet_ceil_column_coordinate + 1;
    end;
    
end;

procedure Console_spreadsheet_condition();
begin
    // определить параметры, и доделать потом
end;

begin
    Console_spreadsheet_set_size_for_Y_axis(10);
    Console_spreadsheet_set_size_for_Y_axis(5);
    Console_spreadsheet_set_ceil_content(0,2,'Руэээ');
end.

Конечно, можно было рисовать«с нуля» таблички и выносить туда данные, но зачем? Данный модуль позволяет создавать таблицы «на лету» не без траты времени. Только один минус данного модуля - длинные имена функций для рисования таблиц. Но все-таки, хочу заметить, как создатель данного модуля, на то, что имена функций названы систематизированно, так что запомнить их будет легко.

Кто-то скажет: «Зачем данный модуль, если есть Excel?». Да, действительно функции данного модуля приближены к Excel, но все таки различия есть: рисование в консоли (в отличие от Excel) и малое потребление ОЗУ, что облегчает работу с другими приложениями. Функций в нем предостаточно для рисования красивых и понятных таблиц, хотя и мало цветов для раскраски текста ячеек и самой табличной сетки (border).

Зачем использовать модуль? Иногда следует представить информацию простом и понятном систематизированном виде - таблице. Пока модуль не умеет рисовать графики, но скоро я его "научу" это делать.

Функция «Console_spreadsheet_set_size_for_X_axis(spreadsheet_max_size_X)»[править]

Данная функция позволяет определить длину таблицы (в ячейках) по X. Длина таблицы в ячейках - это количество ячеек, которое может быть в одной строке таблицы. Для использования функции надо вместо spreadsheet_max_size_X писать:

Console_spreadsheet_set_size_for_X_axis({число ячеек в строке});

Например:

Console_spreadsheet_set_size_for_X_axis(5);

Функция «Console_spreadsheet_set_size_for_Y_axis(spreadsheet_max_size_Y)»[править]

Данная функция позволяет определить длину таблицы (в ячейках) по Y. Длина таблицы в ячейках - это количество ячеек, которое может быть в одном столбце таблицы. Для использования функции надо вместо spreadsheet_max_size_X писать:

Console_spreadsheet_set_size_for_Y_axis({число ячеек в столбце});

Например:

Console_spreadsheet_set_size_for_Y_axis(5);

Функция «Console_spreadsheet_hide_grid()»[править]

Данная функция позволяет скрыть сетку на таблице. Для использования функции следует писать:

Console_spreadsheet_hide_grid();

Функция «Console_spreadsheet_show_grid()»[править]

Данная функция позволяет показать сетку на таблице. Для использования функции следует писать:

Console_spreadsheet_show_grid();

Функция «Console_spreadsheet_set_background_color(current_spreadsheet_background_color)»[править]

Данная функция позволяет определить цвет фона для таблицы. Для использования функции надо вместо current_spreadsheet_background_color писать:

Console_spreadsheet_set_background_color({имя цвета (по английски)});

Например:

Console_spreadsheet_set_background_color('red');

Функция «Console_spreadsheet_set_text_color(current_spreadsheet_text_color)»[править]

Данная функция позволяет определить цвет для ячейки с координатами X и Y в таблицы. Для использования функции надо вместо current_spreadsheet_text_color писать:

Console_spreadsheet_set_text_color({X},{Y},{имя цвета (по английски)});

Например:

Console_spreadsheet_set_text_color(24,2,'red');

Функция «Console_spreadsheet_set_ceil_content(current_spreadsheet_ceil_string_coordinate,current_spreadsheet_ceil_column_coordinate,current_spreadsheet_ceil_content)»[править]

Данная функция позволяет определить значение для ячейки с координатами X и Y в таблицы. Для использования функции надо вместо current_spreadsheet_ceil_string_coordinate, current_spreadsheet_ceil_column_coordinate и current_spreadsheet_ceil_content писать:

Console_spreadsheet_set_ceil_content({X},{Y},{значение ячейки});

Например:

Console_spreadsheet_set_ceil_content(2,5,'hello');

Немного об «окнах ввода»[править]