2 votes

Aligner les mots dans la colonne

Je suis assez novice en C#, et j'ai pour tâche d'aligner des mots dans des colonnes. En gros, j'ai un bloc-notes avec du texte dedans, par exemple : wordone word two... wordmillion et disons qu'il y en a 6 lignes. J'ai besoin de les mettre dans l'ordre pour que cela ressemble à.. : word one word two word three wordjosdjfjfisio anotherword otherword

Que chaque autre mot commencerait à un endroit comme indiqué (espace supplémentaire à partir du mot le plus long dans la première colonne, etc.) J'ai essayé d'expliquer aussi clairement que possible, des conseils/idées sur la façon de le faire ? Je pense que padright est la solution ? P.S. désolé si la mise en page est incorrecte, je suis assez nouveau dans cette communauté.

2voto

StefanoM5 Points 229

Vous pouvez utiliser \t (tab) dans Console.Writeline() ; Exemple

Console.WriteLine("word one\t\tword two\t\tword three");
Console.WriteLine("wordjosdjfjfisio\tanotherword\totherword");

2voto

PartlyCloudy Points 656

On dirait que vous êtes sur la bonne voie ici !

Tout d'abord, voici la documentation de PadRight : https://msdn.microsoft.com/en-us/library/36f2hz3a%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 .

Tiré de cette explication MSDN, nous pouvons voir l'exemple utile suivant :

string str = "forty-two";
char pad = '.';

Console.WriteLine(str.PadRight(15, pad));    // Displays "forty-two......".
Console.WriteLine(str.PadRight(2,  pad));    // Displays "forty-two".

Ainsi, un algorithme de code psuedo pour votre réponse pourrait être le suivant - faites-moi savoir si vous avez besoin de plus d'explications :

  1. Lire tous les mots de votre fichier dans un tableau de chaînes de caractères.
  2. Trouvez la longueur du mot le plus long, appelons-la maxLength.
  3. Passez en revue tous les mots et écrivez-les sous forme de tableau. Vous voulez les écrire ligne par ligne, en imprimant une nouvelle ligne après chaque ligne. Pour chaque ligne, prenez le nombre de colonnes que vous voulez afficher (3 dans votre exemple).
  4. Au lieu d'écrire le mot lui-même, vous devez utiliser word.PadRight(maxLength + 1, ' ') ;

Note - MaxLength + 1 est juste pour qu'un espace soit affiché après le mot le plus long. J'espère que ces informations sont suffisantes pour vous permettre de progresser. N'hésitez pas à poser des questions complémentaires !

0voto

Thejaka Maldeniya Points 277

Voici un exemple faisant appel à LINQ :

var text = "word_1_1   word_1_2 word_1_3\r\nsome_word_2_1 another_word_2_2  word_2_3\n word_3_1";

var words = text.Replace("\r\n", "\n").Split('\n').Select(x => Regex.Replace(x, " +", " ").Split(' '));
var lengths = words.Select(x => x.Select(y => y.Length));
var maxColumns = lengths.Max(x => x.Count());
var widths = lengths
    .Select(x => x.Concat(Enumerable.Repeat(0, maxColumns)).Take(maxColumns))
    .Aggregate(Enumerable.Repeat(0, maxColumns), (m, x) => { var t = x.ToArray(); m = m.Select((y, i) => y > t[i] ? y : t[i]); return m; });
var paddedLines = words.Select(x => String.Join(" ", x.Zip(widths, (a, b) => a.PadRight(b)).ToArray()));
var paddedText = String.Join("\r\n", paddedLines.ToArray());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X