2013-05-06 6 views
-1

Je dois extraire des données d'un fichier texte et les insérer dans des colonnes dans une feuille Excel. Je sais comment faire si les lignes et la longueur de la chaîne sont connues. Mais le fichier texte particulier est complexe et l'index de départ ou la longueur ne peuvent pas être fournis. Mais le mot de départ (PCPU01) de la ligne est connu. Par exemple: PCPU01,T2716,0.00,0.01,0.00,0.00Extrait des données du fichier texte

sortie: T2716 0 0.01 0 0

Dans ce cas, quelqu'un peut s'il vous plaît laissez-moi savoir comment extraire les textes?

+2

Votre sortie est *** pas *** une sous-chaîne de votre entrée. Que se passe-t-il? – spender

+0

Veuillez montrer le code et les commentaires pertinents seulement. Votre question est _ "Comment est-ce que j'analyse' PCPU01, T2716,0.00,0.01,0.00,0.00' à 'T2716 0 0.01 0 0' s'il vous plaît montrez-moi le code" _. Ce n'est pas comme ça que ça fonctionne. Vous devez montrer ce qui peut différer pour l'entrée, ce que vous voulez faire ensuite et ce que vous avez essayé d'analyser. – CodeCaster

+0

Si vous avez une ligne, vous pouvez trouver l'index du mot de départ (méthode 'IndexOf') puis lire le nombre de caractères requis (ou si vous ne connaissez pas la longueur - vous devez connaître la fin du motif et calculer la longueur requise). Vous pouvez également utiliser 'regex's mais cela va être plus complexe. Essayez certaines de ces idées et mettez à jour la question si vous avez des problèmes. Fournissez-nous également des exemples d'entrées et de sorties attendues pour nous aider à obtenir une solution de travail. – Pako

Répondre

2
using(System.IO.StreamReader sr = new System.IO.StreamReader("test.txt")) 
{ 
    string line; 
    while((line = sr.ReadLine()) != null) 
    { 
     string[] split = line.Split(','); 
     //... 
    } 
} 

split[0] retournera "PCPU01", split[1]"T2716" et ainsi de suite.

+0

@lllidan Merci pour la réponse. C'était utile pour moi –

0

J'espère que cela aide un peu. Vous devrez peut-être l'adapter à vos besoins. Mais ceci est un code de niveau supérieur qui vous donne l'idée générale d'extraire des données d'un bloc-notes.

DialogResult result = openFileDialog.ShowDialog(); 

      Collection<Info> _infoCollection = new Collection<Info>(); 
      Collection<string> listOfSubDomains = new Collection<string>(); 

      string[] row; 
      string line; 

      // READ THE FILE AND STORE IT IN INFO OBJECT AND STORE TAHT INFO OBJECT IN COLLECTION 
      try 
      { 
       using (StreamReader reader = new StreamReader(openFileDialog.FileName)) 
       { 
        while((line = reader.ReadLine()) != null) 
        { 
         Info _info = new Info(); 
         row = line.Split(' '); 

         _info.FirstName = row[0]; 
         _info.LastName = row[1]; 
         _info.Email = row[2]; 
         _info.Id = Convert.ToInt32(row[3]); 

         _infoCollection.Add(_info); 

        } 
       } 

catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
1

Vous pouvez diviser une chaîne en un tableau de chaînes, séparées par un caractère donné. De cette façon, vous pouvez diviser la chaîne source par une virgule et utiliser les chaînes résultantes pour générer votre sortie. Exemple:

string source = "PCPU01,T2716,0.00,0.01,0.00,0.00"; 
string[] parts = source.Split(','); 
StringBuilder result = new StringBuilder(); 

result.Append(parts[1]); // The second element in the array, i.e. T2716 
result.Append(" "); 
result.Append(parts[2]); // 0.00 
... // And so on... 
return result.ToString() // return a string, not a StringBuilder 
0

merci pour les réponses. Ce que je voulais, c'est identifier la ligne particulière dans le fichier texte et diviser la ligne en colonnes. Donc, j'ai pu le faire en appelant une méthode GetLine:

string line15=GetLine(@"test.txt",15); 
public string GetLine(string fileName, int line) 
    { 
     using (System.IO.StreamReader ssr = new System.IO.StreamReader("test.txt")) 
     //using (var ssr = new StreamReader("test.txt")) 
     { 
      for (int i = 1; i < line; i++) 
       ssr.ReadLine(); 
      return ssr.ReadLine(); 
     } 
    } 

Alors je cette ligne en en fente en utilisant le séparateur (,)

0

Ce fut mon approche en C#. Il prend une entrée de chaîne (que vous pouvez sortir d'un fichier texte) et un int avec quelle ligne vous voulez obtenir. Il sépare ensuite la chaîne d'un caractère séparateur donné en une liste qui est ensuite lue. Si le numéro de ligne donné est inférieur au compte de la liste créée, l'entrée est renvoyée.

public string GetLine(string multiline,int line) 
    { 
     List<string> lines = new List<string>(); 
     lines = multiline.Split('\n').ToList<string>(); 

     return lines.Count >= line ? lines[line] : ""; 
    }