きなこもち.net

.NET Framework × UiPath,Orchestrator × Azure × AWS × Angularなどの忘備録

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へ!