C# interruzione di riga ogni n caratteri

Supponiamo di avere una stringa di testo: “QUESTA È UNA PROVA”. Come faccio a dividere ogni n caratteri? Quindi, se n è stato di 10, quindi sarebbe visualizzare:

"THIS IS A "
"TEST"

..si ottiene l’idea. Il motivo è perché voglio dividere una grande linea in linee più piccole, una sorta di ritorno a capo automatico. Credo di poter utilizzare stringa.Split() per questo, ma non ho idea di come e mi sono confuso.

Qualsiasi aiuto sarebbe apprezzato.

InformationsquelleAutor rayanisran | 2011-10-14

5 Replies
  1. 19

    Prendiamo a prestito un’implementazione da la mia risposta sulla revisione del codice. Questo inserisce un’interruzione di riga ogni n caratteri:

    public static string SpliceText(string text, int lineLength) {
      return Regex.Replace(text, "(.{" + lineLength + "})", "$1" + Environment.NewLine);
    }

    Edit:

    Restituisce un array di stringhe invece:

    public static string[] SpliceText(string text, int lineLength) {
      return Regex.Matches(text, ".{1," + lineLength + "}").Cast<Match>().Select(m => m.Value).ToArray();
    }

    InformationsquelleAutor Guffa

  2. 3

    Forse questo può essere utilizzato per gestire in modo efficiente estrema file di grandi dimensioni :

    public IEnumerable<string> GetChunks(this string sourceString, int chunkLength)
    {  
        using(var sr = new StringReader(sourceString))
        {
            var buffer = new char[chunkLength];
            int read;
            while((read= sr.Read(buffer, 0, chunkLength)) == chunkLength)
            {
                yield return new string(buffer, 0, read);
            }        
        }
    }

    In realtà, questo funziona per qualsiasi TextReader. StreamReader è la più comune utilizzato TextReader. È in grado di gestire file di testo molto grandi (IIS file di Log, file di Registro di SharePoint, ecc), senza dover caricare l’intero file, ma leggere riga per riga.

    InformationsquelleAutor Steve B

  3. 2

    Si dovrebbe essere in grado di utilizzare le espressioni regolari per questo. Qui è un esempio:

    //in this case n = 10 - adjust as needed
    List<string> groups = (from Match m in Regex.Matches(str, ".{1,10}") 
                           select m.Value).ToList();
    
    string newString = String.Join(Environment.NewLine, lst.ToArray());

    Fare riferimento a questa domanda per dettagli:

    Suddivisione di un testo in blocchi di una certa dimensione

    InformationsquelleAutor James Johnson

  4. 1

    Probabilmente non è il modo più ottimale, ma senza regex:

    string test = "my awesome line of text which will be split every n characters";
    int nInterval = 10;
    string res = String.Concat(test.Select((c, i) => i > 0 && (i % nInterval) == 0 ? c.ToString() + Environment.NewLine : c.ToString()));
    È meglio utilizzare String.Concat() invece di un join con una stringa vuota.
    grazie per il suggerimento!

    InformationsquelleAutor Peter

  5. 1

    A tornare a questo dopo aver fatto una revisione del codice, c’è un altro modo di fare lo stesso senza l’utilizzo di Regex

    public static IEnumerable<string> SplitText(string text, int length)
    {
        for (int i = 0; i < text.Length; i += length)
        {
            yield return text.Substring(i, Math.Min(length, text.Length - i));  
        }
    }

    InformationsquelleAutor canton7

Lascia un commento