チェンジセット 1504 (default)


以下の違いを無視:
日時:
2021/05/24 15:38:30 (3年前)
更新者:
hizuya@…
ログメッセージ:
  • CSV にオプショナルなカラムを設定できる機能を追加 (途中)。
場所:
framework/trunk
ファイル:
1個の追加
5個の更新

凡例:

未変更
追加
削除
  • framework/trunk/CoreLibrary/Sources/Csv/CsvBeanWriterSettings.cs

    r1368 r1504  
    2222namespace FCSoft.SilverFrost.Framework.Csv 
    2323{ 
     24    using System.Collections.Generic; 
    2425    using System.Diagnostics; 
    2526 
     
    4243        [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
    4344        private CsvColumnLabelResolver columnLabelResolver; 
     45 
     46        /// <summary> 
     47        /// 出力する任意カラムを識別するラベルの一覧。 
     48        /// </summary> 
     49        [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
     50        private IList<string> optionColumnLabels; 
    4451 
    4552 
     
    93100            } 
    94101        } 
     102 
     103        /// <summary> 
     104        /// 出力する任意カラムを識別するラベルの一覧を取得または設定します。 
     105        /// </summary> 
     106        /// <value> 
     107        /// 出力する任意カラムを識別するラベルの一覧。 
     108        /// 既定値は <see langword="null"/> で、任意カラムは出力されません。 
     109        /// </value> 
     110        /// <remarks> 
     111        /// <para> 
     112        /// この一覧の順番で、任意カラムが出力されます。 
     113        /// 各データ行は、この値をキーとしてディクショナリから値を取り出します。 
     114        /// </para> 
     115        /// <para> 
     116        /// <see cref="ColumnLabelResolver"/> プロパティが設定されている場合、 
     117        /// CSV ヘッダーに出力される値は、このリストの各値を元に 
     118        /// <see cref="ColumnLabelResolver"/> が呼び出され、その結果が出力されます。 
     119        /// </para> 
     120        /// </remarks> 
     121        public IList<string> OptionColumnLabels 
     122        { 
     123            get 
     124            { 
     125                return optionColumnLabels; 
     126            } 
     127 
     128            set 
     129            { 
     130                optionColumnLabels = value; 
     131            } 
     132        } 
    95133    } 
    96134} 
  • framework/trunk/CoreLibrary/Sources/Csv/CsvColumnInfo.cs

    r1424 r1504  
    2525    using System; 
    2626    using System.Collections.Generic; 
     27    using System.Collections.Specialized; 
    2728    using System.ComponentModel; 
    2829    using System.Diagnostics; 
     
    122123                && (typeConverter == null || !typeConverter.CanConvertFrom(typeof(string)))) 
    123124            { 
     125                // IOrderedDictionary を実装している場合 
     126                if (typeof(IOrderedDictionary).IsAssignableFrom(instanceType)) 
     127                { 
     128 
     129                } 
     130 
    124131                // メンバの型が配列の場合 
    125132                if (instanceType.IsArray) 
  • framework/trunk/CoreTest/CoreTest.csproj

    r1502 r1504  
    4848  </ItemGroup> 
    4949  <ItemGroup> 
     50    <Compile Include="Sources\Csv\CsvOptionalBean.cs" /> 
    5051    <Compile Include="Sources\Csv\CsvArrayBean.cs" /> 
    5152    <Compile Include="Sources\Csv\CsvBeanInfoTest.cs" /> 
  • framework/trunk/CoreTest/Sources/Csv/CsvBeanReaderTest.cs

    r1424 r1504  
    710710 
    711711        /// <summary> 
     712        /// 任意のカラムを読み込むテストです。 
     713        /// </summary> 
     714        public void TestReadOptionalColumns() 
     715        { 
     716            // FIXME 
     717        } 
     718 
     719        /// <summary> 
    712720        /// 値の前後のスペースを除去して読み込むテストです。 
    713721        /// </summary> 
  • framework/trunk/CoreTest/Sources/Csv/CsvBeanWriterTest.cs

    r1421 r1504  
    2828    using System.Globalization; 
    2929    using System.IO; 
     30    using FCSoft.SilverFrost.Framework.Collection; 
    3031    using FCSoft.SilverFrost.Framework.Globalization; 
    3132    using FCSoft.SilverFrost.Framework.TestResources.Csv; 
     
    197198                    stringWriter.ToString(), 
    198199                    Is.EqualTo("\"1\n2\",\"line_1_1\nline_1_2\"\r\n")); 
     200            } 
     201        } 
     202 
     203        /// <summary> 
     204        /// 任意のカラムを読み込むテストです。 
     205        /// </summary> 
     206        [Test] 
     207        public void TestWriteOptionalColumns() 
     208        { 
     209            using (StringWriter stringWriter = new StringWriter()) 
     210            { 
     211                using (CsvBeanWriter<CsvOptionalBean> beanWriter 
     212                    = new CsvBeanWriter<CsvOptionalBean>( 
     213                        stringWriter, 
     214                        new CsvBeanWriterSettings 
     215                        { 
     216                            OptionColumnLabels = new[] 
     217                            { 
     218                                "option-column-1", 
     219                                "option-column-2", 
     220                            }, 
     221                        })) 
     222                { 
     223                    beanWriter.WriteColumnsLine(new CsvOptionalBean 
     224                    { 
     225                        Label = "line_1", 
     226                        No = 1, 
     227                        Options = new OrderedDictionary<string, string> 
     228                        { 
     229                            { "option-column-1", "option_column_1_line_1" }, 
     230                            { "option-column-2", "option_column_2_line_1" }, 
     231                        } 
     232                    }); 
     233                } 
     234 
     235                Assert.That( 
     236                    stringWriter.ToString(), 
     237                    Is.EqualTo("\"line_1\",\"1\",\"option_column_1_line_1\",\"option_column_2_line_1\"\r\n")); 
    199238            } 
    200239        } 
詳しい使い方は TracChangeset を参照してください。