Closed17
JavaScriptでCSVファイルをごちゃごちゃ

やりたいこと
- 配列からCSVファイルを生成
- 既存のCSVファイルに、配列の値を結合。一つのCSVファイルとして出力

ライブラリを調査




こういうの見てるとライブラリ必要なさそうだな

GPTに雑に聞いた
function arrayToCSV(arr) {
// 配列をCSV形式の文字列に変換
const csvContent = arr.map(e => e.join(",")).join("\n");
return csvContent;
}
function sendCSV(csvContent) {
// CSVファイルをBlobとして作成
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
// FormDataを使用してファイルをサーバーに送信
const formData = new FormData();
formData.append('file', blob, 'output.csv');
// サーバーへのPOSTリクエスト
fetch('/upload', { // /upload はサーバー側の受け取りURL
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
console.log('Success:', data);
})
.catch(error => {
console.error('Error:', error);
});
}
// サンプルのstring[]配列
const data = [
["Name", "Age", "City"],
["John Doe", "30", "New York"],
["Jane Smith", "25", "Los Angeles"],
["Jack White", "27", "Chicago"]
];
// CSVファイルを生成して送信
const csvContent = arrayToCSV(data);
sendCSV(csvContent);

BlobやらFileやら

Blobとは

BlobはBinary Large Objectの略

Blobは不変の生データであるファイルのようなオブジェクトを表す。
new Blob(array)
new Blob(array, options)

自分が今回やりたいことは、idのstring配列をcsvファイルとしてS3にアップロードすること

const ids = ['hoge', 'fuga', 'piyo'];
const blob = new Blob(ids, { type: "text/csv" })
これでblobはできそう

const ids = ['hoge', 'fuga', 'piyo'];
const file = new File(ids, 'hoge.csv', { type: "text/csv" })
これで良さそうか

const csvContent = ids.join("\n");
const fileName = `${new Date().toISOString().replace(/:/g, "-")}.csv`;
const file = new File([csvContent], fileName, { type: "text/csv" });
const result = await uploadFile(file);

2つのcsvファイルを結合したい

export const combineCsvFile = async (
csvFiles: [File, File],
fileName: string,
): Promise<Result<File, Error>> => {
try {
const csvContent = csvFiles
.map(async (csvFile) => {
const csvBufferByCsvFile = await csvFile.arrayBuffer();
const csvContentByCsvFile = new TextDecoder().decode(
csvBufferByCsvFile,
);
return csvContentByCsvFile;
})
.join("\n");
const convertedFile = new File([csvContent], fileName, {
type: "text/csv",
});
return createOk(convertedFile);
} catch (e) {
return createErr(new InternalError("combineCsvFile", { cause: e }));
}
};
このスクラップは2024/08/28にクローズされました