Написать файл .txt со значениями из трех списков

#vb.net #streamwriter

#vb.net #streamwriter

Вопрос:

Я должен экспортировать файл .txt со значениями трех списков для каждой строки. Я попытался сделать это с помощью следующего кода:

 Using writer = New StreamWriter(SaveFileDialog1.FileName)
    For Each o As String In Form10.ListBox1.Items.Cast(Of Object).Zip(Form10.ListBox2.Items.Cast(Of Object).Zip(Form6.ListBox2.Items.Cast(Of Object)), Function(x1, x2, x3) CStr(x1) amp; "," amp; CStr(x2) amp; "," amp; CStr(x3))
        writer.WriteLine(o)
    Next
End Using
  

Я получаю несколько ошибок:

 Error   BC36646 Data type(s) of the type parameter(s) in extension method 'Public Function Zip(Of TSecond, TResult)(second As IEnumerable(Of TSecond), resultSelector As Func(Of Object, TSecond, TResult)) As IEnumerable(Of TResult)' defined in 'Enumerable' cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
Error   BC36586 Argument not specified for parameter 'resultSelector' of extension method 'Public Function Zip(Of TSecond, TResult)(second As IEnumerable(Of TSecond), resultSelector As Func(Of Object, TSecond, TResult)) As IEnumerable(Of TResult)' defined in 'Enumerable'.
Error   BC42020 Variable declaration without an 'As' clause; type of Object assumed.
  

К сожалению, в то время как Form10.Listbox1 и Form10.Listbox2 должны иметь одинаковый размер, Form6.Listbox6 меньше; поэтому файл, который мне нужно экспортировать, должен быть в следующем формате:
F10.LB1, F10.LB2, F6.LB2 — для длины Form6.Listbox6 и F10.LB1, F10.LB2 для остальных элементов. Если вам нужны дополнительные пояснения, пожалуйста, прокомментируйте или ответьте. Спасибо, все собираются написать мне здесь. С наилучшими пожеланиями.

Ответ №1:

Редактировать :

   Using writer = New StreamWriter("d:test.txt")

            For id As Integer = 0 To ListBox1.Items.Count - 1

                Dim to_write As String = ListBox1.Items(id)   ","   ListBox2.Items(id)

                If (ListBox3.Items.Count -1 >= id ) Then
                    to_write  = ","   ListBox3.Items(id)
                End If

                writer.WriteLine(to_write)

            Next

        End Using

  

Не забывайте считать -1; если у вас 5 элементов: от 0 до 4 = 5 элементов.


Вы согласны с этим способом :

   Using writer = New StreamWriter("d:test.txt")
            For Each o As String In ListBox1.Items
                writer.WriteLine(o)
            Next
            For Each o As String In ListBox2.Items
                writer.WriteLine(o)
            Next
            For Each o As String In ListBox3.Items
                writer.WriteLine(o)
            Next
        End Using
  

Или для всех списков :

   Using writer = New StreamWriter("d:test.txt")

            For Each lbx As ListBox In Me.Controls.OfType(Of ListBox)

                For Each o As String In lbx.Items
                    writer.WriteLine(o)
                Next

            Next

        End Using
  

Комментарии:

1. Хорошо, и в том формате, который вы написали, как я могу разделять значения запятыми?

2. Каким способом? У вас есть пример того, что вы хотите?

3. Формат должен быть таким, как 1,2,3, где 1 — значение LB1, 2 — LB2 и 3 — LB3, для количества строк, равного размеру LB3. Для других строк формат равен 1,2, потому что LB1 и LB2 имеют одинаковый размер, но LB3 меньше, чем другой

4. Просто отлажено, и это именно то, что я ищу.

5. Рад вам помочь! Я только что отредактировал одну маленькую вещь: If (ListBox3. Товары. Count -1>= id ) Тогда это выглядит лучше, чем If (ListBox3. Товары. Количество> = идентификатор 1) Затем