private void dealRecord(CSVRecord record, int rowIndex) {
        Map<Integer, Cell> cellMap = new LinkedHashMap<>();
        Iterator<String> cellIterator = record.iterator();
        int columnIndex = 0;
        Boolean autoTrim = csvReadContext.currentReadHolder().globalConfiguration().getAutoTrim();
        while (cellIterator.hasNext()) {
            String cellString = cellIterator.next();
            ReadCellData<String> readCellData = new ReadCellData<>();
            readCellData.setRowIndex(rowIndex);
            readCellData.setColumnIndex(columnIndex);

            // csv is an empty string of whether <code>,,</code> is read or <code>,"",</code>
            if (StringUtils.isNotBlank(cellString)) {
                readCellData.setType(CellDataTypeEnum.STRING);
                readCellData.setStringValue(autoTrim ? cellString.trim() : cellString);
            } else {
                readCellData.setType(CellDataTypeEnum.EMPTY);
            }
            cellMap.put(columnIndex++, readCellData);
        }

        RowTypeEnum rowType = MapUtils.isEmpty(cellMap) ? RowTypeEnum.EMPTY : RowTypeEnum.DATA;
        ReadRowHolder readRowHolder = new ReadRowHolder(rowIndex, rowType,
            csvReadContext.readWorkbookHolder().getGlobalConfiguration(), cellMap);
        csvReadContext.readRowHolder(readRowHolder);

        csvReadContext.csvReadSheetHolder().setCellMap(cellMap);
        csvReadContext.csvReadSheetHolder().setRowIndex(rowIndex);
        csvReadContext.analysisEventProcessor().endRow(csvReadContext);
    }
Processes a single CSV record and maps its content to a structured format for further analysis.

@param record The CSV record to be processed.
@param rowIndex The index of the current row being processed.
This method performs the following steps:
1. Initializes a `LinkedHashMap` to store cell data, ensuring the order of columns is preserved.
2. Iterates through each cell in the CSV record using an iterator.
3. For each cell, creates a `ReadCellData` object and sets its metadata (row index, column index, type, and value).
   - If the cell is not blank, it is treated as a string and optionally trimmed based on the `autoTrim` configuration.
   - If the cell is blank, it is marked as empty.
4. Adds the processed cell data to the `cellMap`.
5. Determines the row type: if the `cellMap` is empty, the row is marked as `EMPTY`; otherwise, it is marked as `DATA`.
6. Creates a `ReadRowHolder` object with the row's metadata and cell map, and stores it in the context.
7. Updates the context's sheet holder with the cell map and row index.
8. Notifies the analysis event processor that the row processing has ended.
fastexcel-core/src/main/java/cn/idev/excel/analysis/csv/CsvExcelReadExecutor.java