MCPcopy Index your code
hub / github.com/zxlie/FeHelper / parseCsvData

Function parseCsvData

apps/chart-maker/main.js:408–511  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

406
407 // 解析CSV数据
408 function parseCsvData() {
409 const input = document.getElementById('csv-data-input').value.trim();
410 const firstRowHeader = document.getElementById('first-row-header').checked;
411 const firstColLabels = document.getElementById('first-col-labels').checked;
412
413 if (!input) {
414 throw new Error('请输入CSV数据');
415 }
416
417 const lines = input.split('\n').filter(line => line.trim());
418 if (lines.length < 2) {
419 throw new Error('CSV数据至少需要两行');
420 }
421
422 const rows = lines.map(line => line.split(',').map(cell => cell.trim()));
423
424 let labels = [];
425 let datasets = [];
426
427 if (firstRowHeader && firstColLabels) {
428 // 第一行是标题,第一列是标签
429 labels = rows.slice(1).map(row => row[0]);
430
431 const headers = rows[0].slice(1);
432 headers.forEach((header, i) => {
433 const data = rows.slice(1).map(row => {
434 const value = parseFloat(row[i+1]);
435 if (isNaN(value)) {
436 throw new Error(`"${row[i+1]}"不是有效的数值`);
437 }
438 return value;
439 });
440
441 datasets.push({
442 label: header,
443 data: data
444 });
445 });
446 } else if (firstRowHeader && !firstColLabels) {
447 // 第一行是标题,但第一列不是标签
448 labels = Array.from({length: rows[0].length}, (_, i) => `数据${i+1}`);
449
450 const headers = rows[0];
451 headers.forEach((header, i) => {
452 const data = rows.slice(1).map(row => {
453 const value = parseFloat(row[i]);
454 if (isNaN(value)) {
455 throw new Error(`"${row[i]}"不是有效的数值`);
456 }
457 return value;
458 });
459
460 datasets.push({
461 label: header,
462 data: data
463 });
464 });
465 } else if (!firstRowHeader && firstColLabels) {

Callers 1

parseInputDataFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected