AFON//Радиотехник
C++Builder · проект 23/50

Разбор CSV

Строки с запятыми → StringGrid.

Задача

Разобрать текст с разделителем-запятой в таблицу StringGrid.

Компоненты на форме

Memo (MemoCsv), StringGrid (Grid), Button (ButtonParse).

Как работает

  1. Ввести или вставить строки CSV.
  2. Разбить каждую строку по запятым.
  3. Разложить поля по ячейкам сетки.

Исходный код модуля

//---------------------------------------------------------------------------
// Проект 23. Разбор CSV в таблицу
// Строки с разделителем → StringGrid.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

// Простой разбор CSV: делим строку по запятой. Возвращаем число полей,
// заполняя переданный массив. Ядро легко проверить тестом.
int splitCsv(const AnsiString &line, AnsiString out[], int maxN)
{
    int n=0, start=1;
    for (int i=1; i<=line.Length() && n<maxN; i++){
        if (line[i]==','){ out[n++]=line.SubString(start,i-start); start=i+1; }
    }
    if (n<maxN) out[n++]=line.SubString(start, line.Length()-start+1);
    return n;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonParseClick(TObject *Sender)
{
    Grid->RowCount = MemoCsv->Lines->Count + 1;
    int maxCols=1;
    for (int r=0; r<MemoCsv->Lines->Count; r++){
        AnsiString cells[32];
        int c = splitCsv(MemoCsv->Lines->Strings[r], cells, 32);
        if (c>maxCols) maxCols=c;
        for (int j=0;j<c;j++) Grid->Cells[j][r]=cells[j];
    }
    Grid->ColCount = maxCols;
}
//---------------------------------------------------------------------------

Пояснения

  • Ядро splitCsv возвращает число полей, заполняя массив.
  • Ширина сетки подгоняется под самую длинную строку.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.

Что дальше

Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.