ranio Ответов: 3

Как динамически разделить строковые значения в C#?


У меня есть строковое значение, которое составляет около 1750 символов. Я планирую сохранить 500 байт один за другим, так как за один раз можно сохранить не более 512 байт . Я могу экономить статически, учитывая ограничение длины. Я хочу сделать то же самое динамически.

Что я уже пробовал:

Основной код выглядит следующим образом:
try
           {
               string encLine = string.Empty;
               string encKey = string.Empty;
               using (StreamReader sr = new StreamReader(@"D:\test.txt"))
               {
                   // Read the stream to a string, and write the string to the console.
                   string line = sr.ReadToEnd();

                   int length = line.Length;
                   int nextlength = length - line.Substring(0, 500).Length;
                   for (int i = 0; i < 500; i++)
                   {
                       string test = line.Substring(0, 500);
                       SavePassword(test);
                       string test2 = line.Substring(500, nextlength);
                       SavePassword(test2);
                   }

                   //line.LastIndexOf(' ', 0, 100).ToString();
                   //Console.WriteLine(line);

               }

3 Ответов

Рейтинг:
2

OriginalGriff

Как я уже сказал, Когда ты в прошлый раз спрашивал время: Как разбить текстовый файл на чтение файла в C#?[^]

Цитата:
Воспользуйся Что streamreader.Читать[^] и вы можете точно указать, сколько символов читать одновременно.

И как вам тоже сказали:
Цитата:
Ваш текстовый файл защищен программным обеспечением GnuPG. Вы должны расшифровать его, чтобы иметь возможность прочитать его содержание.


Задавая один и тот же вопрос, вы не меняете ответов, даже если сами этого хотите...


Рейтинг:
2

sheetalsrss

string MainAddress = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789XXXXXX";
           int TotalLenght = MainAddress.Length;
           int Lenght_1 = 0, Lenght_2 = 0, Lenght_3 = 0;
           if (TotalLenght <= 35)
           {
               Lenght_1 = TotalLenght;
           }
           else
           {
               Lenght_1 = 35;
               if (TotalLenght <= 70)
               {
                   Lenght_2 = TotalLenght-Lenght_1;

               }
               else
               {
                   Lenght_2 = 35;
                   if (TotalLenght <= 105)
                   {
                       Lenght_3 = TotalLenght-(Lenght_1+Lenght_2);

                   }
                   else
                   {
                       Lenght_3 = 35;

                   }

               }
           }


           add1.Text = MainAddress.Substring(0, Lenght_1);
           add2.Text = MainAddress.Substring(Lenght_1, Lenght_2);
           add3.Text = MainAddress.Substring(Lenght_1 + Lenght_2,Lenght_3);


Рейтинг:
0

Nathan Minier

Так что здесь есть пара вопросов, которые необходимо решить.

Во - первых, тип кодировки строки необходимо знать заранее, если вы ограничены определенной длиной байта. Мы будем работать в предположении, что это UTF-8, но имейте в виду, что вам, возможно, придется приспособиться к другим типам кодировки.

Во-вторых, у вас есть произвольная длина строки, поэтому вы не можете полагаться на взятие кусков строки определенного размера (в противном случае 250 было бы идеально). Есть несколько способов снять кожу с этого, но самый простой-адаптировать свою петлю:

using(StreamReader reader = new StreamReader(@"d:\test.txt"))
{
   var stringToChunk = reader.ReadToEnd();

   //Assuming UTF-8, so 1 byte per char
   var chunkLength = 512; //may as well max it out

   for(var i = 0; i < stringToChunk.Length; i += chunkLength)
   {
      //make sure we don't run past our buffer
      if(i + chunkLength > stringToChunk.Length)
      {
         chunkLength = stringToChunk.Length - i;
      }
      
      var chunk = stringToChunk.Substring(i, chunkLength);
      // do something with chunk
   }
}