Как я могу разбить строку C # - PullRequest
0 голосов
/ 13 октября 2010

У меня есть строка, что-то вроде этого:

12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.

и я должен разделить его.

первые 8, затем следующие 4 и т. Д.

Edit: я бы предпочел определить длину кусков в отдельном файле. и программа для получения длины из внешнего файла.

  • Программа (длина1 = а)
  • Файл (a = 8)

Ответы [ 4 ]

4 голосов
/ 13 октября 2010

Чтобы разделить строку, вы можете использовать метод String.SubString(). Он имеет перегрузку, которая принимает начальную позицию и длину:

string input = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";

string sub1 = input.SubString(0, 8);
string sub2 = input.SubString(8, 4);
// and so on.

Чтобы вставить данные в базу данных, вам нужно использовать ADO.NET . Для этого существует множество примеров в Интернете. Надеемся, что ссылка на MSDN поможет вам начать работу.

3 голосов
/ 13 октября 2010

Вы можете использовать String.Substring

var field1 = myString.Substring(0,8);
var field2 = myString.Substring(8,4);

и т. Д.

0 голосов
/ 13 октября 2010

Вот решение, использующее LINQ для получения набора символов на основе списка указанных «страниц».

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//...
public static void TestStringSplit()
{
    var s = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.";
    var chars = s.ToCharArray().AsEnumerable();
    var pages = new List<int>() { 8, 4, 5, 3, 50, 50 };
    var output = new List<string>();

    for (int i = 0; i < pages.Count; i++)
    {
        var page = pages[i];

        output.Add(String.Join("",
            chars.Skip(pages.Where((p, j) => j < i).Sum(p => p)).Take(page)
            ));
    }

    output.ForEach(o => Console.WriteLine(o));
}

возвращается:

12345678
9012
34567
890
12345678901234567890123456789012345678901234567890
1234567890123456789012345678901234567890.

В приведенном выше примере,

  • Переменная pages представляет размер каждой подстроки, которую вы хотите извлечь из основной строки.
  • В выражении Skip LINQ пропускаются все символы, которые уже были "разбиты на страницы".
  • Выражение Take LINQ возвращает группу символов, которые соответствуют ожидаемому размеру.

Преимущество использования перечислимого значения char s состоит в том, что вы не получаете индекс вне диапазона исключений в вызове Skip, как вы это обычно делаете при вызове Substring.

Как вы заполняете переменную pages данными и как вы получаете значения в output в базу данных, зависит от вашей реализации, но это должно дать вам хорошее начало.

0 голосов
/ 13 октября 2010

Я бы сначала изменил эту строку на char [], а затем использовал несколько дополнительных переменных и распечатал (или все, что вам нужно с этим делать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...