0

foreach ループに次の配列があります。

StreamReader reader = new StreamReader(Txt_OrigemPath.Text);
reader.ReadLine().Skip(1);
string conteudo = reader.ReadLine();            
string[] teste = conteudo.Split(new[] { '*' }, StringSplitOptions.RemoveEmptyEntries);

foreach (string s in teste)
{
    string oi = s;
}

私が読んでいる行matriculation, id, id_dependent, birthday ... には、ユーザーが選択したいフィールドと必要な順序を選択する CheckedListBox があるようないくつかのフィールドが含まれています。この選択に従って、配列内の各値の順序を知っています(最初はmatriculation2 番目id、3 番目はname)、フィールドの一部を選択し、その値を変数に渡し、checkedlistbox の順序に従って並べ替えるにはどうすればよいですか? 私が明確になることを願っています。

私はこれを試しました:

using (var reader = new StreamReader(Txt_OrigemPath.Text))
            {
                var campos = new List<Campos>();
                reader.ReadLine();
                while (!reader.EndOfStream)
                {
                    string conteudo = reader.ReadLine();
                    string[] array = conteudo.Split(new[] { '*' }, StringSplitOptions.RemoveEmptyEntries);
                    var campo = new Campos
                    {
                        numero_carteira = array[0]
                    };
                    campos.Add(campo);
                }
            }

リストを調べて、その値をユーザーが選択したフィールドと比較するにはどうすればよい checkedlistboxですか? クラスを再度インスタンス化すると、その{}値は空になるため...

Person p = new Person();
string hi = p.numero_carteira;  // null.....
4

1 に答える 1

1

Skip(1)によって返される最初の行の文字列の最初の文字をスキップしreader.ReadLine()ます。それreader.ReadLine()自体が最初の行をスキップするので、Skip(1)完全に不要です。

まず、フィールドを保存できるクラスを作成します

public class Person
{
    public string Matriculation { get; set; }
    public string ID { get; set; }
    public string IDDependent { get; set; }
    public string Birthday { get; set; }

    public override string ToString()
    {
        return String.Format("{0} {1} ({2})", ID, Matriculation, Birthday);
    }
}

(ここでは簡単にするために文字列を使用しましたが、intとDateTimesも使​​用できます。これには、いくつかの変換が必要です。)

次に、人が保存されるリストを作成します

var persons = new List<Person>();

このリストにエントリを追加します。文字列を分割するときに空のエントリを削除しないでください。削除すると、フィールドの位置が失われます。

using (var reader = new StreamReader(Txt_OrigemPath.Text)) {
    reader.ReadLine();  // Skip first line (if this is what you want to do).
    while (!reader.EndOfStream) {
        string conteudo = reader.ReadLine();
        string[] teste = conteudo.Split('*');
        var person = new Person {
            Matriculation = teste[0],
            ID = teste[1],
            IDDependent = teste[2],
            Birthday = teste[3]
        };
        persons.Add(person);
    }
}

usingステートメントは、終了時にが閉じていることを確認しますStreamReader

于 2013-01-31T20:24:13.367 に答える