1

1つの列に複数の名前のリストが含まれている.txtファイルを赤くしています。これらは次のようにリストされています。

Lastname Middlename Name:
Lastname Middlename Name:
Lastname Middlename Name:
Lastname Middlename Name:
Lastname Middlename Name:

すべての名前のイニシャルを保持し、それらを別のリストに追加したいだけです。次に例を示します。

姓ミドルネーム名:=> LAMN

スペースで区切る必要がありますか?またはいくつかの削除を使用しますか?またはRegEXを使用しますか?ありがとう!

4

4 に答える 4

3
var result = File.ReadAllLines("text.txt")
             .Select(line => new string (line.Split(' ')
                            .Select(s => s.First())
                            .ToArray())
               ).ToList();

編集:

姓から2文字を取得するには:

var result = File.ReadAllLines("text.txt").Select(line =>
            {
                var words = line.Split(' ');
                var la = words.First().Take(2);
                var mn = words.Skip(1).Select(s => s.First());

                return new string(la.Concat(mn).ToArray()).ToUpper();
            }
           ).ToList();

結果は次のとおりです:LAMN

于 2012-09-20T15:15:16.163 に答える
2
public List<Person> ParseFile(string filePath)
{
    List<Person> lp = new List<Person>();
    using (StreamReader sr = new StreamReader(filePath))
    {
        while (!sr.EndOfStream)
        {
            lp.Add(new Person(sr.ReadLine()));
        }
    }
    return lp;
}

class Person
{
    public Person(string fullName)
    {
        this.fullName = fullName;
    }

    private string fullName;
    public string FullName
    {
        get { return fullName; }
        set { fullName = value; }
    }
    private string initials;

    public string Initials
    {
        get { return String.Join("",new string[]{
            String.Join("",fullName.Split(new char[] { ' ' }).Take(1).Select(i => i.Substring(0, 2))),
            String.Join("",fullName.Split(new char[] { ' ' }).Skip(1).Select(i => i.Substring(0, 1)))
        });
        set { initials = value; }
    }
}
于 2012-09-20T15:25:19.690 に答える
1

まず、Personクラスを作成します。

public class Person
{
    string _initials = "";
    public String FirstName { get; set; }
    public String LastName { get; private set; }
    public String MiddleName { get; private set; }
    public String Initials { get { return _initials; } }
    public String FullName { get { return FirstName + MiddleName + LastName; } }

    public Person(String name)
    {
        string[] names = name.Split(' ');
        if (names.Length != 3)
        {
            throw new ArgumentException("Incorrect format for a person.");
        }
        FirstName = names[2];
        MiddleName= names[1];
        LastName  = names[0];
        _initials = 
             String.Concat(LastName[0],LastName[1],MiddleName[0],FirstName[0]);
    }
}

次に、Personクラスにファイルを入力します。

List<Person> personsList = new List<Person>();
using (StreamReader reader = new StreamReader(filePath))
{
    while (!reader.EndOfStream)
    {
        Person p = new Person(reader.ReadLine());
        personsList.Add(p);
    }
}

次に、個人の名、姓、ミドルネーム、およびイニシャルにアクセスできます。

foreach(Person p in personsList)
{
    Console.WriteLine(p.Initials);
}
于 2012-09-20T15:35:02.760 に答える
0

質問に対する完全な解決策ではないかもしれませんが、LINQを使用せずにイニシャルを取得するためのより良い方法だと思います。

名前からイニシャルを抽出する正規表現

于 2016-02-09T16:10:37.937 に答える