2013-06-24 1 views
0

Я создал класс VB.Net, который будет использоваться в VBA для чтения текстовых файлов. Я настроил его так, чтобы пользователь мог указать, какие таблицы в файле он хочет вернуть. То, что я сделал, это построить StringBuilder из таблиц, а затем вернуть его как зубчатый массив, но я не могу получить преобразование конструктора в массив. Я бы хотел, чтобы первый уровень был разделен на «NewLine», а второй уровень - на «,».Преобразование StringBuilder в Jagged Array

Возможно ли это, без использования нескольких массивов и \ или петель?

ответ

0

Это создаст зазубренный массив:

Dim myArray = (From row In myStringBuilder.ToString().Split({vbCrLf}, StringSplitOptions.None) 
       Select (From col In row.Split(","c) 
         Select col 
        ).ToArray() 
      ).ToArray() 

Объяснение:

  • Во-первыхи, мы сводим StringBuilder в строку: myStringBuilder.ToString()
  • Затем мы разделились на разрывах строк: Split({vbCrLf}, StringSplitOptions.None). Так как разрыв строки состоит из двух символов в Windows, мы используем Split overload that accepts a string array (отсюда и фигурные скобки).
  • Внутри строки мы разделили строку на запятую: Split(","c). c указывает, что это символ вместо строки.
  • Наконец, мы преобразуем этот перечислимый список перечислений в массив массивов, применяя ToArray к внешнему, а также к внутреннему выражению LINQ.
+0

Работал как очарование !!!! спасибо Хайнци! – JoeB

0

Вы можете представить свой массив с неровностями, используя вложенные списки и дженерики. Внешняя (строка) будет общим списком, а внутренний (col) может быть списком строк.

Другие подходы могут использовать XML или LINQ, но будут менее эффективными.