#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) Затем