申し分なく、DataGridViewに入力するリストからデータを取得し、それをテキストファイルにエクスポートしています。 CSVにエクスポートする機能を既に実行しましたが、プレーンテキストバージョンも実行したいと考えています。
タイトルとその他の要素の長さは可変であるため、ファイルを保存してメモ帳で開くと、何も並んでいないため、混乱のように見えます。
出力を次のようにしたいと思います。
_Sample Title One Element One Whatever Else
Sample Title 2 Element 2 Whatever Else
S. T. 3 E3 Whatever Else
_
最も長い要素の長さを取得するために各要素をループできるため、残りの各要素に追加するスペースの数を計算できると考えています。
私の主な質問:可変数の文字を文字列に追加するエレガントな方法はありますか?myString.insert(index, charToInsert, howManyToInsert);
もちろん、ループを介してこれを実行する関数を作成することは明らかにできますが、それを実行するより良い方法があるかどうかを確認したかったのです。
前もって感謝します!
-スーター
このためには、おそらくmyString.PadRight(totalLength, charToInsert)
が必要です。
詳細については、 String.PadRightメソッド(Int32) を参照してください。
String.Format()
またはTextWriter.Format()
(実際にファイルに書き込む方法に応じて)を使用して、フィールドの幅を指定します。
String.Format("{0,20}{1,15}{2,15}", "Sample Title One", "Element One", "Whatever Else");
補間された文字列内のフィールドの幅も指定できます。
$"{"Sample Title One",20}{"Element One",15}{"Whatever Else",15}"
そして、ご存じのとおり、適切な文字列コンストラクターを使用して、繰り返される文字列を作成できます。
new String(' ', 20); // string of 20 spaces
String.Format
を使用:
string title1 = "Sample Title One";
string element1 = "Element One";
string format = "{0,-20} {1,-10}";
string result = string.Format(format, title1, element1);
//or you can print to Console directly with
//Console.WriteLine(format, title1, element1);
{0,-20}
の形式では、最初の引数の長さが20であり、負の符号により、文字列が左から右に出力されることが保証されます。
キックのためだけに、.PadRightビットを取得する前に作成する関数を以下に示します。
public string insertSpacesAtEnd(string input, int longest)
{
string output = input;
string spaces = "";
int inputLength = input.Length;
int numToInsert = longest - inputLength;
for (int i = 0; i < numToInsert; i++)
{
spaces += " ";
}
output += spaces;
return output;
}
public int findLongest(List<Results> theList)
{
int longest = 0;
for (int i = 0; i < theList.Count; i++)
{
if (longest < theList[i].title.Length)
longest = theList[i].title.Length;
}
return longest;
}
////Usage////
for (int i = 0; i < storageList.Count; i++)
{
output += insertSpacesAtEnd(storageList[i].title, longest + 5) + storageList[i].rank.Trim() + " " + storageList[i].term.Trim() + " " + storageList[i].name + "\r\n";
}
私はジャスティンに同意し、ホワイトスペースCHARはASCIIコードはこちらを使用して参照できます。したがって、文字番号32は空白を表します。したがって、 :
string.Empty.PadRight(totalLength, (char)32);
別のアプローチ:カスタムメソッド内ですべてのスペースを手動で作成し、呼び出します:
private static string GetSpaces(int totalLength)
{
string result = string.Empty;
for (int i = 0; i < totalLength; i++)
{
result += " ";
}
return result;
}
そして、コード内で呼び出して、空白を作成します:GetSpaces(14);