きな粉もち.net

.NET関連仕事に携わっています。OSSのソースを読んで気がついたことを中心に呟いたりブログに投稿したりしています。最近はUiPathを使ったRPAも研究中。気軽にフォローやツッコミよろしくおねがいします! Gitはここを使っています https://github.com/kinakomotitti

C# Interactive × 長い文字列 × Clipbordにコピーして使ってみた

この記事の目的

この記事では、
C#Interractiveで長い文字列を使うときのコツをまとめること
を目的としています。

本題

★問題になっていること

C# Interactiveは、C#を対話的に使うことができ、とても便利です。
ただ、長い文字列を表示するとき、以下のように「…」で省略されます。

new string('a', 10000)
//output:
//"aaaaaaaa <中略> aaaaaaaaaaaa...


対話的に処理を行っていき、
処理の最後に長い文字列をコピーしてどこかに貼り付けようとしたとき、
肝心の文字が省略されてしまっては元も子もありませんw
今回は、この問題の解決法をメモしていきます。


★解決方法

【解決法】クリップボードにコピーする
値を選択して右クリック→コピーするのではなく、
C# Interactiveの中でクリップボードにコピーするコードを実行します。
例は以下の通りです。

 string target = new string('A', 100000); 
 #r "System.Windows.Presentation"  
 System.Windows.Clipboard.SetText(target);

これで、文字列のもれなくクリップボードにコピーすることができます。



★そもそもことの発端は?

今回の問題に直面したのは、アプリのテストを行っているときでした。
テストのため、base64形式に変換したファイルデータが必要でした。
複数回必要になるデータであれば、コンソールアプリを作ろうと思ったのですが、
初めの数回分のデータがあれば事足りたので、わざわざ作るのも・・・


ということで、C# Interactiveでサクッとデータを作ることにしました。

そして、そこで長い文字列のコピーという問題に出会いましたw
C# Interactiveで”長そうな文字列”を使うときには注意が必要ですね( ゚Д゚)


★【補足情報】最大表示文字数について

何文字まで「…」なしで表示することができるか検証してみました。
※環境の違いによるものは考慮していません。
※ダブルクォーテーション及び、”>”記号や空白については文字数カウントに含めていません。

new string('a', 1000)
//表示結果:〇
//"aaaaaaaa <中略> aaaaaaaaaaaa

new string('a', 1022)
//表示結果:〇
//"aaaaaaaa <中略> aaaaaaaaaaaa

new string('a', 1023)
//表示結果:×
//"aaaaaaaa <中略> aaaaaaaaaaaa...

new string('a', 1024)
//表示結果:×
//"aaaaaaaa <中略> aaaaaaaaaaaa…

検証結果:
1023文字まではすべての文字が表示されます。
ただし、1023文字以降は「…」で省略されます。
※境界値である1023文字については、すべての文字が表示され、「…」も表示されます。

まとめ

C# Interactiveはやっぱり便利だった。
表示できる文字列は1023文字まで!
それを超える文字を表示、コピーしたいときは、Clipboardへ!