unit testDelimitedTextUnit; interface uses DelimitedTextUnit, StringUnit, XPtest, uses_end; procedure testWordGet; procedure testWordCount; procedure testSplit; implementation procedure testWordGet; begin Check('値1', WordGet('値1,,値2,,値3', [','], 0, dmDelimiterExactly)); Check('値2', WordGet('値1,,値2,,値3', [','], 2, dmDelimiterExactly)); Check('値3', WordGet('値1,,値2,,値3', [','], 4, dmDelimiterExactly)); Check('値1', WordGet('値1,,値2,,値3', [','], 0, dmUserFriendly)); Check('値2', WordGet('値1,,値2,,値3', [','], 1, dmUserFriendly)); Check('値3', WordGet('値1,,値2,,値3', [','], 2, dmUserFriendly)); Check('値1', WordGet('値1, 値2 ,値3', [',', ' '], 0, dmDelimiterExactly)); Check('値2', WordGet('値1, 値2 ,値3', [',', ' '], 2, dmDelimiterExactly)); Check('値3', WordGet('値1, 値2 ,値3', [',', ' '], 4, dmDelimiterExactly)); Check('値1', WordGet('値1, 値2 ,値3', [',', ' '], 0, dmUserFriendly)); Check('値2', WordGet('値1, 値2 ,値3', [',', ' '], 1, dmUserFriendly)); Check('値3', WordGet('値1, 値2 ,値3', [',', ' '], 2, dmUserFriendly)); end; procedure testWordCount; begin Check(5, WordCount('値1,,値2,,値3', [','], dmDelimiterExactly)); Check(3, WordCount('値1,,値2,,値3', [','], dmUserFriendly)); Check(5, WordCount('値1, 値2 ,値3', [',', ' '], dmDelimiterExactly)); Check(3, WordCount('値1, 値2 ,値3', [',', ' '], dmUserFriendly)); end; procedure testSplit; var WideStrArray, Delimiter: TWideStringDynArray; ExampleStr: WideString; i: Integer; begin ExampleStr := ''; WideStrArray := Split(ExampleStr, Delimiter, []); Check(0, Length(WideStrArray)); ExampleStr := 'ABC DEF GHI'; SetLength(Delimiter, 1); Delimiter[0] := ''; WideStrArray := Split(ExampleStr, Delimiter, []); Check(1, Length(WideStrArray)); Check('ABC DEF GHI', WideStrArray[0]); ExampleStr := 'ABC DEF GHI'; SetLength(Delimiter, 1); Delimiter[0] := ' '; WideStrArray := Split(ExampleStr, Delimiter, []); Check(3, Length(WideStrArray)); Check('ABC', WideStrArray[0]); Check('DEF', WideStrArray[1]); Check('GHI', WideStrArray[2]); ExampleStr := ' ABC DEF GHI '; SetLength(Delimiter, 1); Delimiter[0] := ' '; WideStrArray := Split(ExampleStr, Delimiter, []); Check(3, Length(WideStrArray)); Check('ABC', WideStrArray[0]); Check('DEF', WideStrArray[1]); Check('GHI', WideStrArray[2]); ExampleStr := '- ABC - DEF-GHI '; SetLength(Delimiter, 3); Delimiter[0] := '-'; Delimiter[1] := '-'; Delimiter[2] := ' '; WideStrArray := Split(ExampleStr, Delimiter, []); Check(3, Length(WideStrArray)); Check('ABC', WideStrArray[0]); Check('DEF', WideStrArray[1]); Check('GHI', WideStrArray[2]); ExampleStr := 'あいうえおかきくけこさしすせそなにぬねの'; SetLength(Delimiter, 5); Delimiter[0] := 'を'; Delimiter[1] := 'えお'; Delimiter[2] := 'けこ'; Delimiter[3] := 'せそ'; Delimiter[4] := 'ねの'; WideStrArray := Split(ExampleStr, Delimiter, []); Check(4, Length(WideStrArray)); Check('あいう', WideStrArray[0]); Check('かきく', WideStrArray[1]); Check('さしす', WideStrArray[2]); Check('なにぬ', WideStrArray[3]); ExampleStr := 'あいうえおかきくけこさしすせそなにぬねの'; SetLength(Delimiter, 6); Delimiter[0] := 'を'; Delimiter[1] := 'あい'; Delimiter[2] := 'か'; Delimiter[3] := 'こ'; Delimiter[4] := 'さ'; Delimiter[5] := 'なに'; WideStrArray := Split(ExampleStr, Delimiter, []); Check(4, Length(WideStrArray)); Check('うえお', WideStrArray[0]); Check('きくけ', WideStrArray[1]); Check('しすせそ', WideStrArray[2]); Check('ぬねの', WideStrArray[3]); ExampleStr := 'うらにわにはにわにわにはにわにわとりがいる'; SetLength(Delimiter, 1); Delimiter[0] := 'は'; WideStrArray := Split(ExampleStr, Delimiter, []); Check(3, Length(WideStrArray)); Check('うらにわに', WideStrArray[0]); Check('にわにわに', WideStrArray[1]); Check('にわにわとりがいる', WideStrArray[2]); //////////////////////////////////////////////////////////// //↓デリミタを含む場合の処理 ExampleStr := ''; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter]); Check(0, Length(WideStrArray)); ExampleStr := 'ABC DEF GHI'; SetLength(Delimiter, 1); Delimiter[0] := ''; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter]); Check(1, Length(WideStrArray)); Check('ABC DEF GHI', WideStrArray[0]); ExampleStr := 'ABC DEF GHI'; SetLength(Delimiter, 1); Delimiter[0] := ' '; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter]); Check(5, Length(WideStrArray)); Check('ABC', WideStrArray[0]); Check(' ', WideStrArray[1]); Check('DEF', WideStrArray[2]); Check(' ', WideStrArray[3]); Check('GHI', WideStrArray[4]); ExampleStr := ' ABC DEF GHI '; SetLength(Delimiter, 1); Delimiter[0] := ' '; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter]); Check(11, Length(WideStrArray)); Check(' ', WideStrArray[0]); Check(' ', WideStrArray[1]); Check('ABC', WideStrArray[2]); Check(' ', WideStrArray[3]); Check(' ', WideStrArray[4]); Check('DEF', WideStrArray[5]); Check(' ', WideStrArray[6]); Check(' ', WideStrArray[7]); Check('GHI', WideStrArray[8]); Check(' ', WideStrArray[9]); Check(' ', WideStrArray[10]); ExampleStr := '- ABC - DEF-GHI '; SetLength(Delimiter, 3); Delimiter[0] := '-'; Delimiter[1] := '-'; Delimiter[2] := ' '; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter]); Check(11, Length(WideStrArray)); Check('-', WideStrArray[0]); Check(' ', WideStrArray[1]); Check('ABC', WideStrArray[2]); Check(' ', WideStrArray[3]); Check('-', WideStrArray[4]); Check(' ', WideStrArray[5]); Check('DEF', WideStrArray[6]); Check('-', WideStrArray[7]); Check('GHI', WideStrArray[8]); Check(' ', WideStrArray[9]); Check(' ', WideStrArray[10]); ExampleStr := 'あいうえおかきくけこさしすせそなにぬねの'; SetLength(Delimiter, 5); Delimiter[0] := 'を'; Delimiter[1] := 'えお'; Delimiter[2] := 'けこ'; Delimiter[3] := 'せそ'; Delimiter[4] := 'ねの'; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter]); Check(8, Length(WideStrArray)); Check('あいう', WideStrArray[0]); Check('えお', WideStrArray[1]); Check('かきく', WideStrArray[2]); Check('けこ', WideStrArray[3]); Check('さしす', WideStrArray[4]); Check('せそ', WideStrArray[5]); Check('なにぬ', WideStrArray[6]); Check('ねの', WideStrArray[7]); ExampleStr := 'あいうえおかきくけこさしすせそなにぬねの'; SetLength(Delimiter, 6); Delimiter[0] := 'を'; Delimiter[1] := 'あい'; Delimiter[2] := 'か'; Delimiter[3] := 'こ'; Delimiter[4] := 'さ'; Delimiter[5] := 'なに'; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter]); Check(9, Length(WideStrArray)); Check('あい', WideStrArray[0]); Check('うえお', WideStrArray[1]); Check('か', WideStrArray[2]); Check('きくけ', WideStrArray[3]); Check('こ', WideStrArray[4]); Check('さ', WideStrArray[5]); Check('しすせそ', WideStrArray[6]); Check('なに', WideStrArray[7]); Check('ぬねの', WideStrArray[8]); ExampleStr := 'うらにわにはにわにわにはにわにわとりがいる'; SetLength(Delimiter, 1); Delimiter[0] := 'は'; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter]); Check(5, Length(WideStrArray)); Check('うらにわに', WideStrArray[0]); Check('は', WideStrArray[1]); Check('にわにわに', WideStrArray[2]); Check('は', WideStrArray[3]); Check('にわにわとりがいる', WideStrArray[4]); //////////////////////////////////////////////////////////// //↓ヌル文字を含む場合の処理 ExampleStr := ''; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter, sfEmptyStr]); i := 0; Check('', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := 'ABC DEF GHI'; SetLength(Delimiter, 1); Delimiter[0] := ''; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter, sfEmptyStr]); i := 0; Check('ABC DEF GHI', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := 'ABC DEF GHI'; SetLength(Delimiter, 1); Delimiter[0] := ' '; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter, sfEmptyStr]); i := 0; Check('ABC', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('DEF', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('GHI', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := ' ABC DEF GHI '; SetLength(Delimiter, 1); Delimiter[0] := ' '; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter, sfEmptyStr]); i := 0; Check('', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('ABC', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('DEF', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('GHI', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := ' ABC DEF GHI '; SetLength(Delimiter, 1); Delimiter[0] := ' '; WideStrArray := Split(ExampleStr, Delimiter, [sfEmptyStr]); i := 0; Check('', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('ABC', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('DEF', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('GHI', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := '- ABC - DEF-GHI '; SetLength(Delimiter, 3); Delimiter[0] := '-'; Delimiter[1] := '-'; Delimiter[2] := ' '; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter, sfEmptyStr]); i := 0; Check('', WideStrArray[i]); Inc(i); Check('-', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('ABC', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('-', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('DEF', WideStrArray[i]); Inc(i); Check('-', WideStrArray[i]); Inc(i); Check('GHI', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(' ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := '- ABC - DEF-GHI '; SetLength(Delimiter, 3); Delimiter[0] := '-'; Delimiter[1] := '-'; Delimiter[2] := ' '; WideStrArray := Split(ExampleStr, Delimiter, [sfEmptyStr]); i := 0; Check('', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('ABC', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('DEF', WideStrArray[i]); Inc(i); Check('GHI', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := 'あいうえおかきくけこさしすせそなにぬねの'; SetLength(Delimiter, 5); Delimiter[0] := 'を'; Delimiter[1] := 'えお'; Delimiter[2] := 'けこ'; Delimiter[3] := 'せそ'; Delimiter[4] := 'ねの'; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter, sfEmptyStr]); i := 0; Check('あいう', WideStrArray[i]); Inc(i); Check('えお', WideStrArray[i]); Inc(i); Check('かきく', WideStrArray[i]); Inc(i); Check('けこ', WideStrArray[i]); Inc(i); Check('さしす', WideStrArray[i]); Inc(i); Check('せそ', WideStrArray[i]); Inc(i); Check('なにぬ', WideStrArray[i]); Inc(i); Check('ねの', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := 'あいうえおかきくけこさしすせそなにぬねの'; SetLength(Delimiter, 5); Delimiter[0] := 'を'; Delimiter[1] := 'えお'; Delimiter[2] := 'けこ'; Delimiter[3] := 'せそ'; Delimiter[4] := 'ねの'; WideStrArray := Split(ExampleStr, Delimiter, [sfEmptyStr]); i := 0; Check('あいう', WideStrArray[i]); Inc(i); Check('かきく', WideStrArray[i]); Inc(i); Check('さしす', WideStrArray[i]); Inc(i); Check('なにぬ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := 'あいうえおかきくけこさしすせそなにぬねの'; SetLength(Delimiter, 6); Delimiter[0] := 'を'; Delimiter[1] := 'あい'; Delimiter[2] := 'か'; Delimiter[3] := 'こ'; Delimiter[4] := 'さ'; Delimiter[5] := 'なに'; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter, sfEmptyStr]); i := 0; Check('', WideStrArray[i]); Inc(i); Check('あい', WideStrArray[i]); Inc(i); Check('うえお', WideStrArray[i]); Inc(i); Check('か', WideStrArray[i]); Inc(i); Check('きくけ', WideStrArray[i]); Inc(i); Check('こ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('さ', WideStrArray[i]); Inc(i); Check('しすせそ', WideStrArray[i]); Inc(i); Check('なに', WideStrArray[i]); Inc(i); Check('ぬねの', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := 'あいうえおかきくけこさしすせそなにぬねの'; SetLength(Delimiter, 6); Delimiter[0] := 'を'; Delimiter[1] := 'あい'; Delimiter[2] := 'か'; Delimiter[3] := 'こ'; Delimiter[4] := 'さ'; Delimiter[5] := 'なに'; WideStrArray := Split(ExampleStr, Delimiter, [sfEmptyStr]); i := 0; Check('', WideStrArray[i]); Inc(i); Check('うえお', WideStrArray[i]); Inc(i); Check('きくけ', WideStrArray[i]); Inc(i); Check('', WideStrArray[i]); Inc(i); Check('しすせそ', WideStrArray[i]); Inc(i); Check('ぬねの', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := 'うらにわにはにわにわにはにわにわとりがいる'; SetLength(Delimiter, 1); Delimiter[0] := 'は'; WideStrArray := Split(ExampleStr, Delimiter, [sfIncludeDelimiter, sfEmptyStr]); i := 0; Check('うらにわに', WideStrArray[i]); Inc(i); Check('は', WideStrArray[i]); Inc(i); Check('にわにわに', WideStrArray[i]); Inc(i); Check('は', WideStrArray[i]); Inc(i); Check('にわにわとりがいる', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); ExampleStr := 'うらにわにはにわにわにはにわにわとりがいる'; SetLength(Delimiter, 1); Delimiter[0] := 'は'; WideStrArray := Split(ExampleStr, Delimiter, [sfEmptyStr]); i := 0; Check('うらにわに', WideStrArray[i]); Inc(i); Check('にわにわに', WideStrArray[i]); Inc(i); Check('にわにわとりがいる', WideStrArray[i]); Inc(i); Check(i, Length(WideStrArray)); end; end.