解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
4.44 KiB
X
# CsvFile ʹÓÃÊÖ²á ±¾Îĵµ»ùÓÚÔ´Âë `NewLife.Core/IO/CsvFile.cs`£¬ÓÃÓÚ˵Ã÷ `CsvFile`£¨CSV ¶ÁдÆ÷£©µÄÉè¼ÆÄ¿±ê¡¢RFC4180 ¼æÈÝÐÐΪ¡¢Í¬²½/Òì²½ API£¬ÒÔ¼°´óÎļþ³¡¾°ÏµÄʹÓý¨Òé¡£ > ¹Ø¼ü´Ê£ºRFC4180¡¢Á÷ʽ½âÎö¡¢ÒýºÅ×ֶΡ¢CRLF¡¢ÔöÁ¿¶Áд¡¢Encoding¡¢Separator¡£ --- ## 1. ¸ÅÊö `CsvFile` ÊÇÒ»¸öÃæÏò¡°³¬´ó CSV Îļþ¡±µÄÇáÁ¿¹¤¾ßÀ֧࣬³Ö£º - **ÖðÐУ¨Record£©¶ÁÈ¡**£º°´¼Ç¼½âÎö¶ø²»ÊǼòµ¥ `ReadLine()+Split`£» - **ÖðÐÐдÈë**£º°´Ðè×·¼ÓдÈ룬±ÜÃâÒ»´ÎÐÔ¹¹½¨Õû¸öÎļþ£» - **RFC4180 »ù±¾¹æÔò¼æÈÝ**£º - ×Ö¶ÎʹÓà `Separator` ·Ö¸ô£» - ×Ö¶ÎÖк¬·Ö¸ô·û/»»ÐÐ/Ë«ÒýºÅʱʹÓÃË«ÒýºÅ°ü¹ü£» - ×Ö¶ÎÄÚË«ÒýºÅÓà `""` תÒ壻 - ÔÊÐíÒýºÅ×Ö¶ÎÄÚ²¿³öÏÖ»»ÐУ¨¿çÐÐ×ֶΣ©¡£ ÊÊÓó¡¾°£º - Êý¾Ýµ¼Èëµ¼³ö£» - ÐèÒª¶Ô³¬´ó CSV ×öÁ÷ʽ¶ÁÈ¡¡¢±ß¶Á±ß´¦Àí£» - ÐèÒªÕýÈ·´¦Àíº¬¶ººÅ/»»ÐÐ/ÒýºÅµÄ×ֶΡ£ --- ## 2. ºËÐÄÊôÐÔ ### 2.1 `Encoding` - ÀàÐÍ£º`Encoding` - ĬÈÏ£º`Encoding.UTF8` Ó°Ï죺 - ¶ÁȡʱÓÃÓÚ¹¹Ôì `StreamReader`£» - дÈëʱÓÃÓÚ¹¹Ôì `StreamWriter`¡£ ˵Ã÷£º - `EnsureReader()` ʹÓà `new StreamReader(_stream, Encoding)`£¬Ä¬ÈÏÆôÓà BOM ¼ì²â£¨`detectEncodingFromByteOrderMarks=true` ΪĬÈÏÐÐΪ£©¡£ ### 2.2 `Separator` - ÀàÐÍ£º`Char` - ĬÈÏ£º`,` ˵Ã÷£º - ¶ÁȡʱÓÃÓÚ×ֶηָô£» - дÈëʱÓÃÓÚÆ´½Ó×ֶΣ¬²¢¾Ý´ËÅжÏÊÇ·ñÐèÒª¼ÓÒýºÅ¡£ --- ## 3. ¹¹ÔìÓë×ÊÔ´¹ÜÀí ### 3.1 ¹¹Ô췽ʽ - `CsvFile(Stream stream)` - `CsvFile(Stream stream, Boolean leaveOpen)` - `CsvFile(String file, Boolean write = false)` `write=false`£ºÒÔ `FileAccess.Read` ´ò¿ª£¨Ö»¶Á£©¡£ `write=true`£ºÒÔ `FileAccess.ReadWrite` ´ò¿ª£¨¶Áд£¬²»×Ô¶¯½Ø¶Ï£©¡£ÊʺÏÔöÁ¿×·¼Ó»ò¸²¸Çд£¨¸²¸ÇдʱÓɵ÷Ó÷½¿ØÖÆ `Position/SetLength`£©¡£ ### 3.2 `leaveOpen` µ±Ê¹Óà `CsvFile(Stream, leaveOpen:true)`£º - `Dispose()` ²»»á¹Ø±Õ `_stream`£» - µ«ÈÔ»á `Flush()`/ÊÍ·ÅÄÚ²¿ `_reader/_writer`¡£ ### 3.3 Dispose ÐÐΪ - `Dispose()` »áÏÈ `_writer?.Flush()`£¬±ÜÃâдÈëÆ÷»º³åδÂäÅÌ£» - Èô `_leaveOpen=false`£º»áÊÍ·Å `_reader/_writer` ²¢¹Ø±ÕÁ÷¡£ ÔÚ `NET5_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER` Ï»¹Ìṩ `DisposeAsync()`¡£ --- ## 4. ¶ÁÈ¡£¨RFC4180 ·ç¸ñ Record ½âÎö£© ### 4.1 `String[]? ReadLine()` ¶ÁȡһÌõ¼Ç¼£¨Record£©£¬·µ»Ø×Ö¶ÎÊý×飺 - EOF ·µ»Ø `null`£» - Ö§³ÖÒýºÅ×Ö¶ÎÄÚ²¿°üº¬ `Separator`¡¢`\r\n`¡¢`\n`£» - `""` ½âÎöΪ `"`£» - Ö§³Öβ²¿¿Õ×ֶΣ¨ÀýÈç `a,b,` => Èý¸ö×ֶΣ¬×îºóÒ»¸öΪ¿Õ×Ö·û´®£©¡£ ### 4.2 `IEnumerable<String[]> ReadAll()` ͬ²½Ã¶¾Ù¶Áȡȫ²¿¼Ç¼£º - ÄÚ²¿Ñ­»·µ÷Óà `ReadLine()` Ö±µ½ EOF¡£ ### 4.3 Òì²½¶ÁÈ¡ ½öÔÚ `NET5_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER` Ï¿ÉÓ㺠- `ValueTask<String[]?> ReadLineAsync()` - `IAsyncEnumerable<String[]> ReadAllAsync()` Ò첽ʵÏÖ²ÉÓÃÄÚ²¿×Ö·û»º³åÇø£¨`Char[4096]`£©½âÎö¡£ --- ## 5. дÈ루RFC4180 ·ç¸ñתÒ壩 ### 5.1 `void WriteLine(IEnumerable<Object?> line)` дһÐмǼ£¨×Ô¶¯×·¼ÓÐÐβ»»ÐУ©£º - `DateTime`£ºÊ¹Óà `ToFullString("")`£» - `Boolean`£ºÐ´ `1/0`£» - ÆäËüÀàÐÍ£º`item + ""` ת×Ö·û´®£» - **³¤ÕûÊý×Ö·û´®£¨³¤¶È > 9 ÇҿɽâÎöΪ Int64£©**£ºÇ°Öà `\t`£¬ÓÃÓÚ±ÜÃâ Excel/WPS µÈÏÔʾΪ¿ÆÑ§¼ÆÊý·¨£» - Èô×ֶΰüº¬£º·Ö¸ô·û/CR/LF/Ë«ÒýºÅ£¬ÔòÕûÌå¼ÓË«ÒýºÅ£¬²¢½«ÄÚ²¿Ë«ÒýºÅÌæ»»Îª `""`¡£ ### 5.2 `void WriteAll(IEnumerable<IEnumerable<Object?>> data)` ÖðÐÐдÈ룺 - ÄÚ²¿Ñ­»·µ÷Óà `WriteLine(line)`¡£ ### 5.3 `Task WriteLineAsync(IEnumerable<Object> line)` Ò첽дһÐУ¨½öдÈëÆ÷Òì²½£©¡£ ×¢Ò⣺ - ¸Ã·½·¨²ÎÊýΪ `IEnumerable<Object>`£¬²»½ÓÊÜ `null` ÏÓëͬ²½ `Object?` ²»Í¬£©¡£ --- ## 6. ×îСʾÀý ### 6.1 ¶ÁÈ¡ CSV ```csharp using NewLife.IO; using var csv = new CsvFile("./data.csv"); while (true) { var row = csv.ReadLine(); if (row == null) break; // row ÊÇ×Ö¶ÎÊý×é // ÀýÈ磺row[0], row[1] ... } ``` ### 6.2 дÈë CSV£¨¸²¸Çд£© ```csharp using NewLife.IO; using var csv = new CsvFile("./out.csv", write: true); // Ö±½ÓдÈë csv.WriteLine("Id", "Name", "Remark"); csv.WriteLine(1, "Stone", "hello,world"); ``` ### 6.3 ×·¼Óд£¨ÔöÁ¿£© ```csharp using NewLife.IO; using var csv = new CsvFile("./out.csv", write: true); // ¹¹Ô캯Êý write:true ÒÔ ReadWrite ´ò¿ªÇÒ²»½Ø¶Ï // ÈôҪ׷¼Óµ½Î²²¿£¬¿É×ÔÐж¨Î» // £¨Ò²¿ÉÓà FileStream + CsvFile(stream, true) ¸üÁé»î£© csv.WriteLine(DateTime.Now, true, "append"); ``` --- ## 7. ×¢ÒâÊÂÏîÓë³£¼ûÎÊÌâ ### 7.1 ¶ÁÈ¡²»Êǰ´¡°ÎïÀíÐС±¶øÊǰ´¡°¼Ç¼¡± µ±×ֶα»Ë«ÒýºÅ°ü¹üÇÒÄÚ²¿º¬»»ÐÐʱ£¬`ReadLine()` »á¿çÔ½¶àÐжÁµ½ÒýºÅ±ÕºÏΪֹ£¬ÕâÊÇ CSV ÓïÒåÕýÈ·µÄÐÐΪ¡£ ### 7.2 `Separator` ¸ÄÎªÖÆ±í·û£¨TSV£© ```csharp var csv = new CsvFile(file) { Separator = '\t' }; ``` дÈëʱ»á¾Ý´ËÅжÏÊÇ·ñÐèÒªÒýºÅ¡£ ### 7.3 ±àÂëÑ¡Ôñ - Excel ÔÚijЩ»·¾³ÏÂ¶Ô UTF-8 ÎÞ BOM ʶ±ð²»¼Ñ£»ÈôÐèÒª¼æÈÝ£¬¿É¿¼ÂÇдÈëǰ×ÔÐÐÊä³ö BOM »ò¸ÄÓà `Encoding.UTF8` ´ø BOM µÄ°æ±¾£¨Óɵ÷Ó÷½¿ØÖÆÁ÷дÈ룩¡£ --- ## 8. Ïà¹ØÁ´½Ó - ÔÚÏßÎĵµ£º`https://newlifex.com/core/csv_file` - Ô´Â룺`NewLife.Core/IO/CsvFile.cs`