سی اس وی encoding/csv
خواندن و نوشتن پروندههای CSV، با نقلقول درست و تبدیل به مقدار پویا.
واردسازی کدگذاری.سی اس وی
CSV سادهترین قالب جدول است: هر خط یک ردیف و خانهها با ویرگول لاتین از هم جدا. خانهای که ویرگول، نقلقول یا شکستن خط دارد داخل نقلقول میآید و نقلقول درونش دوتایی میشود. این بسته همین قالب را میخواند و مینویسد، خط به خط با خواندن خط و نوشتن خط یا کل متن با خواندن همه و نوشتن همه، و آن را به یک مقدار برای جیسون و برعکس تبدیل میکند.
همهی خانهها رشتهاند؛ CSV عدد و مقدار منطقی ندارد. برای صفحهگستردههایی با چند برگه، فرمول یا گونه، اکسل را ببینید؛ و برای CSVای که به یک مدل یادگیری ماشین داده میشود، داده را.
اشتباههای رایج:
- جداکننده همیشه ویرگول است. پروندهای از اکسل اروپایی با
;میان خانهها، یا پروندهای که با tab جدا شده، در هر خط یک خانه خوانده میشود؛ جداکننده را جایگزین کنید یا آن خطها را خودتان تفکیک کنید. - پس از خانهی داخل نقلقول باید بیفاصله ویرگول یا پایان خط بیاید. در
"Pen" ,blueفاصلهی پس از نقلقول ردیف را تمام میکند و بقیهی خط بیهیچ خطایی کنار میرود. - شکستن خط درون خانهی نقلقولدار دوباره خوانده نمیشود:
خواندن همهاول متن را به خطها میشکند.نوشتن خطچنین خانهای را برای ابزارهای دیگر درست در نقلقول میگذارد، ولی این خواننده آن را دو تکه میکند. از مقدارستونها را از کلیدهای نخستین شیء و به ترتیب افزودهشدنشان برمیدارد، پس جدولی که بابه مقدارخوانده شده با همان ترتیب ستونها نوشته میشود.
راهنما: جمعزدن ستونهای یک خروجی CSV
کار معمول، خروجی یک صفحهگسترده است: همهی ردیفها را بخوانید، از سرستون بگذرید، ستونهای عددی را تبدیل کنید و جمع بزنید. خواندن همه یک جدول سی اس وی میدهد که هر عضو rows آن یک وکتور fields دارد، یک رشته برای هر ستون. یک نگاشت جمعها را نگه میدارد و یک وکتور شهرها را به ترتیب نخستین دیده شدن.
واردسازی کدگذاری.سی اس وی
تابع ریشه:
متن := `date,city,product,amount
2026-10-01,Tehran,tea,120
2026-10-01,Shiraz,coffee,90
2026-10-02,Tehran,coffee,75
2026-10-02,Tabriz,tea,40
2026-10-03,Shiraz,tea,60
`
ناپایا جدول := سی اس وی.خواندن همه(متن)
ناپایا شهرها := وکتور {} برگردان وکتور<رشته>
ناپایا جمعها := نگاشت {} برگردان نگاشت<رشته، صحیح>
ناپایا کل := ۰
هر ای، ردیف در جدول.ردیفها:
اگر ای == ۰ یا ردیف.خانهها.طول() < ۴:
گذر
پایان
شهر := ردیف.خانهها.بگیر(۱)
مبلغ := ردیف.خانهها.بگیر(۳).به صحیح()
اگر وارونه جمعها.دارد(شهر):
شهرها.بیفزا(شهر)
پایان
جمعها.درج(شهر، جمعها.دریافت با پیش فرض(شهر، ۰) + مبلغ)
کل += مبلغ
پایان
هر ش در شهرها:
سرچاپ ش، جمعها.بگیر(ش)
پایان
سرچاپ "جمع کل"، کل
سی اس وی.آزادسازی جدول(جدول)
پایانجلوی ردیفهای کوتاه را بگیرید، مثل بررسی ردیف.fields.طول() < ۴: یک خط خالی یا پروندهای که با دست ویرایش شده ممکن است ستونهایش از سرستون کمتر باشد. پس از کار، جدول را با آزادسازی جدول آزاد کنید.
راهنما: نوشتن پروندهی CSV
نوشتن خط یک ردیف را به هم میچسباند و نقلقول را فقط جایی میگذارد که لازم است: دور خانهای که ویرگول، نقلقول یا شکستن خط دارد، با دوتایی کردن نقلقولهای درونی. این همان چیزی است که اکسل، لیبرهآفیس و بیشتر ابزارهای ورود داده انتظار دارند، و نوشتن ردیفها به دست خودتان ستونها را به ترتیبی که میخواهید نگه میدارد.
واردسازی کدگذاری.سی اس وی
ساختار مخاطب:
همگانی نام: رشته = ""
همگانی شرکت: رشته = ""
همگانی یادداشت: رشته = ""
پایان
تابع ریشه:
ناپایا افراد := وکتور {} برگردان وکتور<مخاطب>
افراد.بیفزا(مخاطب { نام = "Sara Ahmadi"، شرکت = "Nik, Ltd."، یادداشت = "prefers email" })
افراد.بیفزا(مخاطب { نام = "Reza"، شرکت = "Pars"، یادداشت = `said "call me Monday"` })
ناپایا خروجی := ""
ناپایا سرستون := وکتور {} برگردان وکتور<رشته>
سرستون.بیفزا("name")
سرستون.بیفزا("company")
سرستون.بیفزا("note")
خروجی = خروجی + سی اس وی.نوشتن خط(سرستون) + "\n"
هر ف در افراد:
ناپایا خانهها := وکتور {} برگردان وکتور<رشته>
خانهها.بیفزا(ف.نام)
خانهها.بیفزا(ف.شرکت)
خانهها.بیفزا(ف.یادداشت)
خروجی = خروجی + سی اس وی.نوشتن خط(خانهها) + "\n"
پایان
چاپ خروجی
ردیف := سی اس وی.خواندن خط(`Reza,Pars,"said ""call me Monday"""`)
سرچاپ "دوباره خوانده شد:"، ردیف.بگیر(۲)
پایانسرستون را هم مثل ردیفهای داده بنویسید. نوشتن خط شکستن خط را نمیافزاید، پس "\n" را خودتان بگذارید، یا "\r\n" برای ابزارهایی که آن را میخواهند. برای ذخیرهی نتیجه، خروجی را با بستهی پرونده بنویسید.
راهنما: از CSV به جیسون
به مقدار ردیف سرستون را کلید میگیرد و هر ردیف دیگر را به یک شیء تبدیل میکند که بستهی جیسون میتواند چاپش کند. این یعنی یک مبدل کوچک CSV به جیسون در چند خط. از مقدار از آرایهای از شیءها به متن CSV برمیگردد.
واردسازی کدگذاری.سی اس وی
واردسازی کدگذاری.جیسون
واردسازی کدگذاری.مقدار
تابع ریشه:
متن := "sku,title,stock\nBK-01,Notebook,12\nPN-07,\"Pen, blue\",0\n"
ردیفها := سی اس وی.به مقدار(متن)
سرچاپ مقدار.طول آرایه(ردیفها)، "ردیف"
گزینهها := جیسون.گزینههای جیسون { تورفتگی = " "، چیدن کلیدها = درست }
سرچاپ جیسون.کدگذاری(ردیفها، گزینهها)
نخست := مقدار.عضو آرایه(ردیفها، ۰)
سرچاپ "stock یک رشته است:"، مقدار.رشته است(مقدار.مقدار کلید(نخست، "stock"))
پایانهمهی خانهها رشته میمانند، حتی 12، چون CSV گونه ندارد. ستونهایی را که میدانید عددیاند با به صحیح() یا به اعشار() تبدیل کنید. با گزینههای سی اس وی { header = نادرست }، تابع به مقدار سفارشی پروندهی بیسرستون را میخواند: هر ردیف، از جمله ردیف اول، شیئی با کلیدهای col0، col1 و همینطور تا آخر میشود.
راهنما: حالتهای مرزی
خواننده خانهها را دقیقاً همانطور که نوشته شدهاند نگه میدارد. این در چند جا مهم است:
واردسازی کدگذاری.سی اس وی
تابع نمایش(سطر: رشته):
خانهها := سی اس وی.خواندن خط(سطر)
ناپایا م := ""
هر خ در خانهها:
م = م + "[" + خ + "]"
پایان
سرچاپ خانهها.طول()، "خانه:"، م
پایان
تابع ریشه:
نمایش("a,b,c")
نمایش("a,,c")
نمایش(" a , b ")
نمایش(`"x,y",z`)
نمایش(`"she said ""hi""",ok`)
نمایش("trailing,")
نمایش(`"Pen" ,blue,3`)
نمایش("sku;title;stock")
ناپایا ج := سی اس وی.خواندن همه("id,name\r\n1,Ali\r\n2,Sara\r\n")
سرچاپ "ردیفها با CRLF:"، ج.ردیفها.طول()، ج.ردیفها.بگیر(۲).خانهها.بگیر(۱)
سی اس وی.آزادسازی جدول(ج)
پایان- خانهی خالی، از جمله خانهی پس از ویرگول پایانی، یک رشتهی خالی است، نه ستونی که نباشد.
- فاصلههای دور خانه نگه داشته میشوند؛ اگر منبع شما ستونها را با فاصله پر میکند، آنها را با
رشته.پیرایشبپیرایید. - پایان خط ویندوزی (
\r\n) راخواندن همهدرست میخواند. خواندن همهخطهای خالی را رد میکند، پس جدول هیچوقت ردیف خالی ندارد.- فاصله میان نقلقول پایانی و ویرگول ردیف را تمام میکند:
"Pen" ,blue,3یک خانه میدهد. - خطی با نقطهویرگول یک خانه است، چون فقط ویرگول خانهها را جدا میکند.
خواندن همهپیش از خواندن خانهها متن را به خطها میشکند، پس خانهای در نقلقول که شکستن خط دارد دو تکه برمیگردد. اگر دادهی شما ممکن است شکستن خط داشته باشد، پیش از نوشتن پرونده آن را جایگزین کنید.
گونهها
ردیف سی اس وی CSVRow
ساختار ردیف سی اس وی| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| خانهها | fields | وکتور<رشته> | خانههای ردیف. |
واردسازی کدگذاری.سی اس وی
واردسازی کدگذاری.مقدار
تابع ریشه:
متن := "name,city\nعلی,تهران\n\"سارا، مهندس\",\"شیراز\"\n"
ناپایا ج := سی اس وی.خواندن همه(متن)
سرچاپ ج.ردیفها.طول()
هر ر در ج.ردیفها:
سرچاپ ر.خانهها.طول()، ر.خانهها[۰]
پایان
سرچاپ سی اس وی.نوشتن همه(ج)
سی اس وی.آزادسازی جدول(ج)
سرچاپ سی اس وی.خواندن خط(`a,"b,c",d`)
ناپایا خانهها := وکتور {} برگردان وکتور<رشته>
خانهها.بیفزا("ساده")
خانهها.بیفزا(`با "نقل"`)
سرچاپ سی اس وی.نوشتن خط(خانهها)
م := سی اس وی.به مقدار("name,age\nعلی,30\n")
سرچاپ مقدار.طول آرایه(م)، مقدار.به رشته(مقدار.مقدار کلید(مقدار.عضو آرایه(م، ۰)، "name"))
سرچاپ سی اس وی.از مقدار(م)
گ := سی اس وی.گزینههای سی اس وی { سرستون = نادرست }
ب := سی اس وی.به مقدار سفارشی("1,2\n3,4\n"، گ)
سرچاپ مقدار.طول آرایه(ب)، سی اس وی.از مقدار سفارشی(ب، گ)
پایانجدول سی اس وی CSVTable
ساختار جدول سی اس وی| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ردیفها | rows | وکتور<ردیف سی اس وی> | ردیفها، از جمله ردیف سرستون؛ خطهای خالی در آن نیستند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam
گزینههای سی اس وی CSVOptions
ساختار گزینههای سی اس وی| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| سرستون | header | منطقی = درست | ردیف اول سرستون است؛ پیشفرض درست. اگر نادرست باشد، هر ردیف شیئی با کلیدهای col0، col1 و مانند آن میشود و از مقدار سفارشی ردیف سرستون نمینویسد. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam
تابعها
خواندن همه ReadAll
تابع خواندن همه(text: رشته): جدول سی اس وی\n و \r\n هر دو کار میکنند و خطهای خالی رد میشوند. نتیجه را با آزادسازی جدول آزاد کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam
آزادسازی جدول FreeTable
تابع آزادسازی جدول(t &: جدول سی اس وی)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam
نوشتن همه WriteAll
تابع نوشتن همه(table: جدول سی اس وی): رشته\r\n میان ردیفها و بی شکستن خط پس از ردیف آخر.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam
به مقدار سفارشی ToValueWith
تابع به مقدار سفارشی(text: رشته، opts: گزینههای سی اس وی): value.Valueمقدار تبدیل میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam
به مقدار ToValue
تابع به مقدار(text: رشته): value.Valueنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam
از مقدار سفارشی FromValueWith
تابع از مقدار سفارشی(v: value.Value، opts: گزینههای سی اس وی): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam
از مقدار FromValue
تابع از مقدار(v: value.Value): رشتهنوشتن خط را به کار ببرید.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam
خواندن خط ReadLine
تابع خواندن خط(line: رشته): وکتور<رشته>نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam
نوشتن خط WriteLine
تابع نوشتن خط(fields: وکتور<رشته>): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-csv-Table.salam