web-dev-qa-db-ja.com

C#-文字列に可変数のスペースを挿入しますか? (出力ファイルのフォーマット)

申し分なく、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);

もちろん、ループを介してこれを実行する関数を作成することは明らかにできますが、それを実行するより良い方法があるかどうかを確認したかったのです。

前もって感謝します!

-スーター

52
Sootah

このためには、おそらくmyString.PadRight(totalLength, charToInsert)が必要です。

詳細については、 String.PadRightメソッド(Int32) を参照してください。

101
Gabe

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
41
Jeff Mercado

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であり、負の符号により、文字列が左から右に出力されることが保証されます。

3
Cheng Chen

キックのためだけに、.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";
    }
2
Sootah

私はジャスティンに同意し、ホワイトスペース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);

0
Davood Rokni