Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
困ったCSVファイルの話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
もっち
January 15, 2026
Technology
2
400
困ったCSVファイルの話
Yokohama North Meetup #12「LT新年会2026」
https://yokohama-north.connpass.com/event/377972/
で発表した資料です。
もっち
January 15, 2026
Tweet
Share
More Decks by もっち
See All by もっち
もう外には出ない。より快適なフルリモート環境を目指して
mottyzzz
13
12k
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
12
7.7k
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
1.2k
Other Decks in Technology
See All in Technology
新職業『オーケストレーター』誕生 — エージェント10体を同時に回すAgentOps
gunta
4
1.7k
8万デプロイ
iwamot
PRO
2
200
IBM Bobを使って、PostgreSQLのToDoアプリをDb2へ変換してみよう/202603_Dojo_Bob
mayumihirano
1
270
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
110
メタデータ同期に潜んでいた問題 〜 Cache Stampede 時の Cycle Wait を⾒つけた話
lycorptech_jp
PRO
0
150
20260305_【白金鉱業】分析者が地理情報を武器にするための軽量なアドホック分析環境
yucho147
2
200
Agentic Software Modernization - Back to the Roots (Zürich Agentic Coding and Architectures, März 2026)
feststelltaste
1
220
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
8
7.1k
Ultra Ethernet (UEC) v1.0 仕様概説
markunet
3
230
Security Diaries of an Open Source IAM
ahus1
0
210
「Blue Team Labs Online」入門 - みんなで挑むログ解析バトル
v_avenger
0
130
When an innocent-looking ListOffsets Call Took Down Our Kafka Cluster
lycorptech_jp
PRO
0
110
Featured
See All Featured
Utilizing Notion as your number one productivity tool
mfonobong
4
250
Mind Mapping
helmedeiros
PRO
1
110
A better future with KSS
kneath
240
18k
GraphQLとの向き合い方2022年版
quramy
50
14k
So, you think you're a good person
axbom
PRO
2
1.9k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.7k
The agentic SEO stack - context over prompts
schlessera
0
680
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
140
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
330
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
390
AI: The stuff that nobody shows you
jnunemaker
PRO
3
360
Documentation Writing (for coders)
carmenintech
77
5.3k
Transcript
困ったCSVファイルの話 2026/01/15 もっち(@mottyzzz) Yokohama North Meetup #12「LT新年会2026」
⾃⼰紹介 もっち(@mottyzzz) 松本明紘 株式会社 カケハシ(2023年2⽉〜) 好き:ビール🍻 コーヒー☕ 横浜の南⻄側に住んでます(北部ではない) 2
3 みんな⼤好き CSV
CSVファイルの⽤途 4 • データ受け渡し • エクスポート・⼀括インポート • 処理中の中間データ • ログ
• バックアップ・アーカイブ • 設定ファイル • テストデータ
5 CSV (Comma-Separated Values)
CSVの仲間 TSV = Tab-Separated Values SSV = Space-Separated Values SSV
= Semicolon-Separated Values 6
7 CSV (Character-Separated Values) それらをまとめて、こう呼ばれることもある
割とみんな ⾃由なCSVフォーマットで CSVファイルを作ってる 8
RFC 4180 9
10 RFC 4180 CSVファイルの共通フォーマットと MIMEタイプ(text/csv)の仕様を定 義している 2005年に策定された 下記のようなフォーマット仕様が 定義されている •
レコードの区切り(改⾏) • ヘッダーの扱い⽅ • ダブルクォーテーション(")の使い⽅ • エスケープの⽅法 • 列数の⼀致 https://www.rfc-editor.org/rfc/rfc4180
みなさん仕様 守っていますか? 11
読み込み・書き込みする ソフトウェア(ライブラリ、ツール) によって独⾃の解釈で処理している 12
これまでに出会った 困ったCSVファイルの フォーマットを 5つ紹介します!!! 13
困った①:""なしの改⾏、カンマ、ダブルクォーテーション 14 商品名,説明,価格,備考 りんご,新鮮な国産りんご,100,なし みかん,愛媛県産,⽢くてジューシー,80,⼈気商品 メロン,⾼級メロン "⼣張キング",5000,ギフト⽤化粧箱⼊り トマト,完熟トマト 産地: 熊本県
糖度: 8度以上,200,サラダ、パスタに最適 よくあるCSVパーサーでは処理で きないことが多いので、独⾃に処 理する必要があるが、ある程度構 造に制約がないと難しい ダブルクォーテーション使ってね
困った②:複数⾏ヘッダ+α 15 ,,売上データ,,,,,在庫データ,, ,,,2024年上半期,,2024年下半期,,,⽉末時点, 商品コード,商品名,1⽉,2⽉,3⽉,4⽉,5⽉,6⽉,数量,単位 ,,(千円),(千円),(千円),(千円),(千円),(千円),, A001,りんご,150,180,200,220,190,210,500,個 A002,みかん,120,90,80,100,110,130,300,個 A003,バナナ,200,210,190,180,200,220,450,房 B001,⽜乳,80,85,90,88,92,95,200,本
B002,ヨーグルト,60,65,70,72,68,75,150,個 C001,⾷パン,100,110,105,115,120,125,80,⽄ C002,菓⼦パン,45,50,55,48,52,58,120,個 ほとんどのケースで、skip=nで処理 することでなんとかなるけど、、、 パースにヘッダーの情報が必要な場 合は頑張らなきゃいけない ヘッダ
困った③:固定⾏数じゃない基本情報 16 注⽂番号,ORD-2024-0123 注⽂⽇,2024-01-15 顧客名,株式会社サンプル商事 配送先住所,東京都渋⾕区1-2-3 電話番号,03-1234-5678 … 明細 商品コード,商品名,数量,単価,⼩計
PROD001,りんご,10,100,1000 PROD002,みかん,20,80,1600 PROD003,バナナ,5,120,600 システムからエクスポートした帳票 系のデータで稀によく⾒る形。 処理すべきデータレコード以外のも のが先頭に固定⾏数でまとまってく れていればまだ良いけど、、、 基本情報
困った④:⾏によって列数が変わる 17 H,ORD-2024-0123,2024-01-15,株式会社サンプル商事 C,⽥中太郎, 03-1234-5678 A,150-0001,東京都渋⾕区1-2-3,サンプルビル5F I,1,りんご,10,100,1000 I,2,みかん,20,80,1600 I,3,バナナ,5,120,600 S,⼩計,3200
S,消費税(10%),320 S,送料,500 T,合計⾦額,4020 P,銀⾏振込,2024-01-31,サンプル銀⾏ 本店 普通 1234567 N,午前中配送希望 N,段ボール箱で梱包 D,2024-01-16,ヤマト運輸,1234-5678-9012,配送中 CSVパーサーによっては読み込みエ ラーになったり、列数が⼀番多いと ころに合わせてくれたり。 エラーになる場合は、独⾃にパース する必要がある。他の困ったケース と組み合わさると⾟い
困った⑤:複数の表が⼀つのCSVファイルに混在している 18 売上ID,⽇付,商品,数量,⾦額 S001,2024-01-15,りんご,10,1000 S002,2024-01-15,みかん,5,400 … 仕⼊ID,⽇付,商品,仕⼊先,数量,単価,合計⾦額 P001,2024-01-10,りんご,⼭⽥農園,100,80,8000 P002,2024-01-12,みかん,鈴⽊果樹園,200,70,14000 …
商品,在庫数,最終更新 りんご,50,2024-01-15 みかん,120,2024-01-15 バナナ,80,2024-01-14 ファイル分けようね
その他 • 同じカラム名のカラムを複数存在させないで • ⽂字コードの混在やめて • BOM • エスケープシーケンス独⾃に決めるのやめて •
"123"が数値なのか⽂字列なのか分からない • 空値の表現統⼀して(N/A, “”, 半⾓スペース, 空⽂字, Null) 19
実装者はCSVファイルを処理する時は、 ⾃分が⽣成するときは保守的 他所から受け取るものには寛容 になるべきである(意訳) 20 RFC 4180にも下記の記載がある
CSVファイルを扱うときは 気をつけましょう!!! 21
困ったCSVファイルの話 2026/01/15 もっち(@mottyzzz) Yokohama North Meetup #12「LT新年会2026」