2016-04-06 3 views
0

Bir dosyadaki metni biçimlendiriyorum ve her sözcüğü dosyaya ayrı bir dizi dizini olarak eklemem gerekiyor.adların bir metin kutucuğunu 4 ayrı dizi dizinine bölme nasıl C#

Sanders, Bernie M Demokrat

Boehner, John M Cumhuriyetçi

Pelosi, Nancy F Demokrat

Rubio Mario M Cumhuriyetçi

: Burada dosyadaki metnin bir örnektir

, metni ayırmak için denediğim şey. düzenli alanlardır ve bir sekme ile oluşturulmamış beri

  char[] whitespace = new char[] { ' ', '\t'}; 
     string[] separate = line.Split(whitespace); 

birkaç boşluk önce ve ayırmak için zorlaştırır "m" veya "f", sonra vardır. bu yüzden dizime boş boşluklar ekler. Birlikte metni biçimlendirmek kez:

  string formatted = string.Format("{2} {1} {0}", separate); 
     formatted = formatted.Replace(",", ""); 
     Console.WriteLine("Dear " + formatted + ":"); 

sonuç olması gerekir:

Sayın Bernie Sanders: ..etc

+0

Eğer bölünmüş dizide boş bir dize veya boşluk alıyorsunuz? Boş dizeyi alırsanız, bunları yok saymak için 'StringSplitOptions.RemoveEmptyEntries 'ikinci bir parametre olarak kullanabilirsiniz. – ScoobyDrew18

cevap

0

İşte bir örnek. Tüm endeksleri takip etmeniz gerekecek.

Düzenli ifade karakterleri ve anlamları için başvuru. https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx

Regex, takıldıktan sonra gerçekten güçlüdür.

Burada \s+ kullanıyorum \s herhangi bir boşluk karakteri. +, 'açgözlülük' yapar. Araçlar, herhangi bir boşluk karakteri 1 veya Daha fazla kez eşleşir. 0 veya daha fazla zaman anlamına gelen * niceleyiciyi kullanabilirsiniz. bu bir xD dikkatli olun

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Threading.Tasks; 

namespace Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //extra spaces everywhere 
      string person = "Sanders, Bernie  M  Democrat\nBoehner, John M Republican"; 
      var stripchars = new Regex(@"\s+"); 
      person = stripchars.Replace(person, " "); 
      string[] line = person.Split('\n'); // spit on each new line 
      // temp vars to hold key pieces of information 
      string firstname = ""; 
      string lastname = ""; 
      string sex = ""; 
      string party = ""; 
      string formatted = ""; 

      // the new line string 
      for (int i = 0; i < line.Length; i++) 
      { 

       string[] tempCells = line[i].Split(' '); 
       //each cell in the line 
       for (int k = 0; k < tempCells.Length; k++) 
       { 
        firstname = tempCells[0].Replace(",", ""); 
        lastname = tempCells[1]; 
        sex = tempCells[2]; 
        party = tempCells[3]; 
       } 
       //updated to use tunrary 
       string malefemale = sex == "M" ? "Mr." : "Ms."; 
       formatted = "Dear " + malefemale + " " + lastname + " " + firstname + ":"; 

       Console.WriteLine(formatted); 
      } 
      Console.Read();//pause 
     } 
    } 

} 

Çıktı: Dear John Boehner:

+0

M ve F var, bunlar ilk değil, cinsiyet. – Dispersia

+0

@Dispersia Bunu işaretlediğiniz için teşekkürler! Kodumu güncelledim. – Radmation

+0

Np, Ben ilk kez okudum aynı şeyi düşündüm – Dispersia

1

Benim iyi bahis normal bir ifade kullanmak olacaktır.

var str = "Sanders,\tBernie M Democrat"; 
var whitespaces = new Regex(@"\s+"); 
str = whitespaces.Replace(str, " "); 
var ar = str.Split(' '); 

\ s + sadece bir boşluk ile değiştirilir 1 veya daha fazla beyaz alanlara, açılımı, bu nedenle kolayca ayırabilirsiniz.

1

Başka normal ifade:

string[] wordArray = Regex.Split("This is \t my string of words!,", "[^a-zA-Z]+");