跳至內容
Astera Technology

分清可移除的包裝與真正內容

只移除允許的一組外框,未框住的備註仍留資料內。

下載完整個案資料及參考答案 ↓

訂明本例驗收任務

假設結果接收器可用原始資料文字,或恰好一組外層 csv 程式碼框,框前後不能有其他行。開閉框各佔一行;其他框位置屬格式錯誤。沒有框的備註仍是內容,不能靜默刪去。只回內容及行數,不驗 CSV 意思。

  1. 確認完整外層包裝
  2. 只去掉容許開閉行
  3. 資料文字原樣保留

包裝錯誤便暫停,不猜資料起點。

使用已填個案

原創假設輸入及確切答案鍵
個案已提供輸入預期結構化結果判斷及原因
一組完整外框{"text":"```csv\na,b\n1,2\n```"}{"payload":"a,b\n1,2","lines":2}只移除已訂外框,兩行資料保留。
備註沒有外框{"text":"Note\na,b\n1,2"}{"payload":"Note\na,b\n1,2","lines":3}Note 仍留作輸入,下一步資料核對才判是否可接。
閉框後多一行{"text":"```csv\na,b\n```\nNote"}{"error":"wrapper"}整份輸入不符合只得一組外框的要求。
下載可編輯 CSV ↓

逐步處理 trailing-note 個案,須得到甚麼結果?原因是甚麼?

查看參考答案

{"error":"wrapper"}。整份輸入不符合只得一組外框的要求。

執行完整本機驗算

另存為 .mjs,以 Node.js 執行;只驗提供的個案
import assert from 'node:assert/strict';

function evaluate(x){
 const fence=String.fromCharCode(96).repeat(3),lines=x.text.split('\n');if(lines[0]===fence+'csv'&&lines.at(-1)===fence&&lines.slice(1,-1).every(l=>!l.includes(fence))){const payload=lines.slice(1,-1).join('\n');return {payload,lines:payload?lines.length-2:0};}
 if(x.text.includes(fence))return {error:'wrapper'};return {payload:x.text,lines:x.text?lines.length:0};
}

const cases = [
  {
    "id": "one-outer-fence",
    "input": {
      "text": "```csv\na,b\n1,2\n```"
    },
    "expected": {
      "payload": "a,b\n1,2",
      "lines": 2
    }
  },
  {
    "id": "unfenced-note",
    "input": {
      "text": "Note\na,b\n1,2"
    },
    "expected": {
      "payload": "Note\na,b\n1,2",
      "lines": 3
    }
  },
  {
    "id": "trailing-note",
    "input": {
      "text": "```csv\na,b\n```\nNote"
    },
    "expected": {
      "error": "wrapper"
    }
  }
];
for (const c of cases) assert.deepEqual(evaluate(c.input), c.expected, c.id);
console.log(JSON.stringify({checked:cases.length,caseIds:cases.map(c=>c.id)}));
下載可執行例子 ↓

排查匯入接收器時原始與移框後文字一起保存。csv 框名是本例字面格式;程式沒有解析或認證 CSV 內容。

相關資源