2017-08-04 1 views
-2

Je voudrais savoir comment afficher des chaînes à partir d'un fichier texte dans une zone de texte, mais seulement jusqu'à ce qu'il atteigne un signe "@" dans le fichier texte C#?Comment afficher une chaîne jusqu'à un certain caractère spécial dans une zone de texte à partir d'un fichier

string lines = outputToBox.ReadToEnd(); 
//outputToBox is streamreader var that holds the conent of the file 
       int index = lines.IndexOf('@'); 
       txtDisplay.Text = lines.Substring(0, index); 

le problème que j'ai maintenant est qu'il ne présente pas toutes les lignes dans la zone de texte seul le premier

+2

Regardez '.IndexOf()' 'et .Substring()' méthodes. – Equalsk

+0

Avez-vous déjà essayé quelque chose? Vous pouvez regarder dans substring, indexOf, et textbox.text – kristech

+0

@kristech Oui j'ai essayé de travailler avec des énumérateurs et peu de choses avec linq mais je ne comprends pas le concept assez bon pour les utiliser –

Répondre

0

Cela devrait faire l'affaire et est probablement la solution optimale, sans plus d'information> : D

void Main() 
{ 
    Debug.Print(Homework_Problem_Number_54_000_601. 
      Parse("NAME SURNAME NUMBER @2131231313")); 
    //this prints "NAME SURNAME NUMBER " without the quotes to the console 
} 

void SetTextBoxText(TextBox textBox, string value) { textBox.Text = value; } 

unsafe static class Homework_Problem_Number_54_000_601 
{ 
    [ThreadStatic]static StringBuilder __builder; 

    public static string Parse(string textToParse) 
    { 
     if (textToParse == null) return null; 

     var builder = __builder = __builder ?? new StringBuilder(); 
     builder.clear(); 

     fixed (char* pTextToParse = textToParse) 
     { 
      var pTerminus = pTextToParse + textToParse.Length; 
      for (var pChar = pTextToParse; pChar < pTerminus; ++pChar) 
      { 
       switch (*pChar) 
       { 
        case '@': 
         return builder.ToString(); 
         break; 
        default: 
         builder.Append(*pChar); 
         break; 
       } 
      } 
     } 

     throw new ArgumentException("textToParse was not in the expected format"); 
    } 
} 

En ce qui concerne la lecture du fichier, c'est difficile de dire sans spécification de format de fichier de votre part, mais maintenant que vous avez posté le code que je vais essayer ceci:

string lines = outputToBox.ReadToEnd(); 
StringBuilder builder = new StringBuilder(); 

foreach (string line in lines.Split('\n')) 
{ 
    int index = line.IndexOf('@'); 
    if (index != -1) builder.AppendLine(line.Substring(0, index)); 
} 

txtDisplay.Text = builder.ToString(); 

Ne pas oublier de changer la zone de texte à mode multi-ligne si nécessaire.

+0

J'utilise un dialogue de fichier ouvert. Il semble que je l'ai fait fonctionner en utilisant le code: string lines = outputToBox.ReadToEnd(); // outputToBox est streamreader var qui contient le conent du fichier int index = lines.IndexOf ('@'); txtDisplay.Text = lines.Substring (0, index); Mais il affiche uniquement la première ligne et pas le reste qui est dans le fichier texte –

+0

@ Quantu-Adunati J'ai ajouté la solution au bas de ma réponse éditée - s'il vous plaît lui donner un shto. – hoodaticus

+0

Il donne une erreur en disant que la longueur ne peut pas être inférieure à zéro @hoodacticus –

2

Il serait utile si vous incluez un exemple de ce que vous avez et de ce que vous voulez qu'il ressemble. Je suppose que votre entrée ressemble à ceci

[email protected]@x.field3 
[email protected]@y.field3 
[email protected]@z.field3 

S'il y a plusieurs lignes dans la zone de texte vous pourriez transformer en un tableau, puis exécutez foreach à travers eux (si vous avez besoin d'un exemple, je peux vous montrer)

string[] fileInput = System.IO.File.ReadAllLines(@FILE_PATH) 

il sortie comme celui-ci

fileInput[0] = [email protected]@x.field3 

vous pouvez ajouter

string[] myArray = fileInput[x].Split('@') // Into an array, so if you only want 'x.field1', you enter fileInput[0], and return myArray[0] 

et de mettre en œuvre votre foreach. Si vous voulez des champs très spécifiques du fichier qui commencent par certain chars, je vous recommande de lire un peu à propos de LINQ et comment exécuter de petites requêtes. Si votre objectif est de faire cela pour chaque instance existante d'une chaîne dans n'importe quel fichier, vous avez besoin d'une boucle.

https://msdn.microsoft.com/en-us/library/bb308959.aspx (LINQ)

+0

C'est la meilleure réponse car la question vient d'être écrite. – hoodaticus