CSVを整列済みテキスト表に変換
名前、役職、都市を並べた3行のCSVを貼り付けると、縦線で区切られ列がそろった表になり、見出しの下には破線が引かれます。ターミナルやチャット、ドキュメントにそのまま貼り付けられます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
lenientオプションを設定すれば、短い行を空のセルで埋めることも可能です。
解析と整列の仕組み
パーサーはRFC 4180の規約に従います。異なる場合は、行番号と両方のカウントを示すエラーで呼び出しが失敗します。末尾のカンマが欠けた行は、目に見えてずれた表を生み、ずれた表は表がないよりも悪いからです。
それでもデータを表示したい場合は、lenientをtrueに設定すると、短い行が最も幅の広い行まで空のセルで埋められます。次に、各列の幅がその列の最長セルとして計算され、すべてのセルがその幅までパディングされ、列が縦棒で結合されます。先頭行がヘッダーの場合は、その下にハイフンの罫線が引かれます。
すべてが決定論的です。 同じ入力からは常にバイト単位で同一の出力が生成されます。
区切り文字、ヘッダー、日常の使い方
すべてのCSVがカンマを使うわけではありません。ヨーロッパのエクスポートではセミコロンがよく使われ、多くのデータベースダンプではタブや縦棒が使われます。データにヘッダー行がない場合は、headerをfalseに設定すると、先頭行がデータとして区切り線なしでレンダリングされます。
この機能はエッジで実行され、何も保存されません。テキストは解析、レンダリング、破棄されます。典型的な利用者は、CIログに要約表を出力するリリーススクリプト、チャットで読みやすい表を返すボット、整列したサンプルデータを埋め込むドキュメントジェネレーターです。
入力は1 MB・50,000行まで受け付けており、人間が貼り付けるようなエクスポートや機械生成のほとんどのエクスポートを十分にカバーします。
活用例
CIログで読みやすい表
ビルドやマイグレーションの要約を、誰も読まないカンマ区切りの行ではなく、プレーンテキストのログに整列した表として出力します。
チャットやチケットへのデータ貼り付け
CSVエクスポートを一度整形すれば、Slackやチケット、メールに貼り付けても整列と可読性が保たれます。
ドキュメントへのサンプルデータ埋め込み
READMEやドキュメントに、パディングを手作業で管理することなく、固定幅ブロックとしてサンプルデータセットを埋め込めます。
よくある質問
CSVは保存されますか?
いいえ。 テキストは解析、レンダリング、破棄され、表だけが返されます。
行の列数が正しくない場合はどうなりますか?
lenientをtrueに設定すると、短い行が空のセルで埋められます。
データにヘッダー行がない場合は?
headerをfalseに設定すると、先頭行がデータとしてレンダリングされ、区切り線は引かれません。
値の中にコンマを含むCSVも正しく表になりますか?
なります。二重引用符で囲まれた値は、中にコンマや改行、2つ重ねた引用符があっても1つの値として扱われます。空の行は無視されます。
コンマ以外の区切り文字にも対応していますか?
対応しています。ヨーロッパでよく使われるセミコロンや、データベースの出力に多いタブや縦線を区切り文字に指定すれば、ほかの処理はそのまま同じように動きます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/text/csv-to-table \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"csv":"name,role,city\nAda Lovelace,Engineer,London\nGrace Hopper,Admiral,New York\nAlan Turing,Mathematician,London"}'const res = await fetch("https://api.kit.forhosting.com/text/csv-to-table", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"csv": "name,role,city\nAda Lovelace,Engineer,London\nGrace Hopper,Admiral,New York\nAlan Turing,Mathematician,London"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/csv-to-table",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"csv": "name,role,city\nAda Lovelace,Engineer,London\nGrace Hopper,Admiral,New York\nAlan Turing,Mathematician,London"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/csv-to-table", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"csv":"name,role,city\\nAda Lovelace,Engineer,London\\nGrace Hopper,Admiral,New York\\nAlan Turing,Mathematician,London"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"csv":"name,role,city\nAda Lovelace,Engineer,London\nGrace Hopper,Admiral,New York\nAlan Turing,Mathematician,London"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/csv-to-table", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"csv": "name,role,city\nAda Lovelace,Engineer,London\nGrace Hopper,Admiral,New York\nAlan Turing,Mathematician,London"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.csv_to_table",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 1 |
max_rows | 50000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
CSVテキスト表変換APIは、生のCSVテキストを受け取り、ターミナル、README、コミットメッセージ、チャットにそのまま貼り付けられる、整列した等幅テキスト表に変換します。引用符で囲まれたフィールド(引用符内のカンマ、セミコロン、改行)を正しく解析し、各列の幅を計算して、すべてのセルをパディングして列を揃え、ヘッダーの下に区切り線を引きます。ヘッダーとフィールド数が異なる行がある場合、表がずれて表示されるのを防ぐため、明確なエラーで呼び出しが失敗します。
CSVを固定幅の表として表示する理由
CSVはデータが行き来する形式ですが、読むには最悪の形式です。出力はプレーンテキストなので、どのツール、チャット、コードレビューに貼り付けても書式が崩れず、携帯電話の画面でもワイドモニターでも同じように読めます。長い値を持つ列があると、次のフィールドがある行では右に押しやられ、別の行ではそうならないため、2行目にはもう目で位置を追えなくなります。スプレッドシートはテキストを完全に隠すことでこの問題を解決しますが、出力先がターミナルのログ、プルリクエストのコメント、プレーンテキストのメール、Markdownのドキュメントである場合、それはまさに避けたいことです。CSV テキスト表レンダラーは、データをテキストのまま(コピー可能、diffで比較可能、grepで検索可能)保ちながら、スプレッドシートが提供していた唯一の利点である「列の整列」を取り戻します。エクスポートを貼り付けるだけで、すべてのフィールドがすべての行で同じ位置に配置され、ヘッダーの下にハイフンの罫線が引かれたブロックが得られます。
解析と整列の仕組み
二重引用符で囲まれたフィールドには、区切り文字、改行、および二重引用符を2つ連続させたリテラルの引用符を含めることができ、空行は無視されます。実務上これは重要です。 実際のエクスポートでは、カンマを含む住所、セミコロンを含むメモ、改行を含むメッセージなど、何か興味深い内容を含むフィールドこそが引用符で囲まれるからです。解析後、レンダラーはすべての行が先頭行と同じフィールド数を持つかを確認します。
区切り文字、ヘッダー、日常の使い方
delimiterフィールドに文字を渡せば、引用符付きフィールド、エラー検出、寛容なパディングなど、他のすべては同じように動作します。同じコードがこのページのブラウザ上でも無料で実行されるため、アカウントなしで貼り付けたエクスポートを整形でき、APIで自動化する場合にのみ1回$0.002をお支払いいただきます。
技術的な質問
料金はいくらですか?
API経由で1リクエスト$0.002です。このページのブラウザ上でも無料で実行できます。
カンマを含む引用符付きフィールドは対応していますか?
はい。パーサーはRFC 4180に従い、引用符付きフィールドには区切り文字、改行、二重引用符2つでエスケープされた引用符を含めることができます。
カンマの代わりにセミコロンやタブを使えますか?
はい。delimiterフィールドに任意の1文字を渡してください。デフォルトはカンマです。
入力のサイズ制限は?
1リクエストあたり1 MB・50,000行までです。人間が読むことを前提としたエクスポートはすべてカバーします。