Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вырезание нужных данных из массива строк. / 25 сообщений из 35, страница 1 из 2
12.04.2016, 10:00
    #39213253
EspadaLio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Здравствуйте. При обработке данных физ. эксперимента столкнулась со следующей задачей: необходимо из массива строк выделить отдельно 5-й столбец. Мне советовали вырезать по пробелам...Не могу понять, как это сделать. Собрала форму, прилагаю кусок кода, в который хотела ухитриться уместить этот цикл и пример таблицы (собсно уже в частично работающей форме).
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Dim dlg As Windows.Forms.OpenFileDialog
        Dim strName As String

        dlg = New OpenFileDialog()

        dlg.Multiselect = True
        dlg.InitialDirectory = "c:\scripts"

        If dlg.ShowDialog() = _
        Windows.Forms.DialogResult.OK Then
            For Each strName In dlg.FileNames
                Using sr As StreamReader = _
                 File.OpenText(strName)
                    Dim strLine As String
                    i = 1
                    EOF = "False"
                    While (EOF <> "True")
                        strLine = sr.ReadLine()
                        If (strLine <> "") Then
                            ListBox1.Items.Add(strLine)
                            i = i + 1

                        Else
                            EOF = "True"
                        End If
                    End While
                    sr.Close()
                End Using
            Next
        End If

Модератор: Учимся использовать тэги оформления кода - FAQ

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
12.04.2016, 10:04
    #39213260
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Образец обрабатываемых данных нам самим придумать?
...
Рейтинг: 0 / 0
12.04.2016, 10:06
    #39213265
EspadaLio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Прошу прощения, не прикрепила сразу.
...
Рейтинг: 0 / 0
12.04.2016, 10:08
    #39213268
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Нужно
а) удалить все задвоения пробелов в строке
б) превратить строку в массив с помощью Split
d) извлечь пятый элемент
...
Рейтинг: 0 / 0
12.04.2016, 10:09
    #39213270
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Shocker.ProНужно
а) удалить все задвоения пробелов в строке
б) превратить строку в массив с помощью Split
А зачем удалять задвоения пробелов перед Split?
...
Рейтинг: 0 / 0
12.04.2016, 10:15
    #39213279
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
skyANAА зачем удалять задвоения пробелов перед Split?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
"6 7".Split(' ')
{string[2]}
    [0]: "6"
    [1]: "7"

"6  7".Split(' ')
{string[3]}
    [0]: "6"
    [1]: ""
    [2]: "7"
...
Рейтинг: 0 / 0
12.04.2016, 10:16
    #39213281
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
ну да, вариант StringSplitOptions.RemoveEmptyEntries
...
Рейтинг: 0 / 0
12.04.2016, 10:24
    #39213292
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Shocker.Proну да, вариант StringSplitOptions.RemoveEmptyEntries
ну да https://msdn.microsoft.com/en-US/library/ms131448(v=vs.110).aspx]String.Split Method (Char[], StringSplitOptions)

StringSplitOptions.RemoveEmptyEntries to omit empty array elements from the array returned; or StringSplitOptions.None to include empty array elements in the array returned.
...
Рейтинг: 0 / 0
12.04.2016, 10:33
    #39213311
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Если это текст с разделителем "пробел", то не надо удалять задвоения пробелов. Два пробела подряд означают что между ними пустая строка.
...
Рейтинг: 0 / 0
12.04.2016, 10:37
    #39213321
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Dima TЕсли это текст с разделителем "пробел", то не надо удалять задвоения пробелов. Два пробела подряд означают что между ними пустая строка.загляни в приложенный файл - там форматирование пробелами, а не разделитель пробел
...
Рейтинг: 0 / 0
12.04.2016, 10:46
    #39213339
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Shocker.ProDima TЕсли это текст с разделителем "пробел", то не надо удалять задвоения пробелов. Два пробела подряд означают что между ними пустая строка.загляни в приложенный файл - там форматирование пробелами, а не разделитель пробел
Не заметил что файл дали. Там выровнено пробелами. Надо просто вырезать подстроку из 6 символов начиная с 16-го.
...
Рейтинг: 0 / 0
12.04.2016, 10:50
    #39213345
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Dima TНадо просто вырезать подстроку из 6 символов начиная с 16-го.это плохой совет. Мы не знаем, как формируется файл, возможно, он может выглядеть иначе при увеличении значности какого-нибудь из столбцов. Split будет гораздо универсальнее (хотя, возможно непринципиально, медленнее)
...
Рейтинг: 0 / 0
12.04.2016, 10:58
    #39213357
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Если надо разово, то проще файл переименовать в TXT и экселем открыть как с колонками фиксированной ширины.
...
Рейтинг: 0 / 0
12.04.2016, 11:02
    #39213364
EspadaLio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Dima T, Таких таблиц довольно много. Минимум 365. Не знаю, подойдет ли тут разовый рецепт.
Пробую со сплитом.
...
Рейтинг: 0 / 0
12.04.2016, 11:07
    #39213373
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Любую программу можно усложнить с помощью регулярных выражений!

Код: c#
1.
2.
3.
4.
5.
6.
int n = 5; //Выбираем 5-ый столбец
string s = "1  1   1  0.00  2.56  0.00  0.00 243.1   0.0   0.0  1.25  36.6  64.8  2.80  0.00";
Regex reg = new Regex(@"(\S+\s+){"+(n-1)+@"}(\S+)\s+.+");

Match m = reg.Match(s);
Console.WriteLine(m.Groups[2].Value);
...
Рейтинг: 0 / 0
12.04.2016, 11:41
    #39213417
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Shocker.ProDima TНадо просто вырезать подстроку из 6 символов начиная с 16-го.это плохой совет. Мы не знаем, как формируется файл, возможно, он может выглядеть иначе при увеличении значности какого-нибудь из столбцов. Split будет гораздо универсальнее (хотя, возможно непринципиально, медленнее)
Не согласен. Описание формата нет, поэтому приходится гадать. В данном случае я вижу текст с колонками фиксированной ширины. Если так, пробелов между значениями может вообще не быть. Например колонка 6 символов и и значение 6.
В конкретном примере только числа, а в общем случае могут быть строки как с пробелами внутри, так и пустые. И тут Split() будет вообще не в тему.
...
Рейтинг: 0 / 0
12.04.2016, 11:46
    #39213422
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Shocker.Proвозможно, он может выглядеть иначе при увеличении значности какого-нибудь из столбцов
Возможно нет, как выше написал - просто исчезнет пробел.
Чтобы не гадать - для данного случая я бы посоветовал добавить контроль количества значений, т.е. прочитали строку, разбили на значения и после проверка что в результате ровно 15 значений.
...
Рейтинг: 0 / 0
12.04.2016, 11:51
    #39213432
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
EspadaLioDima T, Таких таблиц довольно много. Минимум 365.
Можно сначала объединить в один файл, затем с ним работать.
...
Рейтинг: 0 / 0
12.04.2016, 11:56
    #39213438
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Dima TEspadaLioDima T, Таких таблиц довольно много. Минимум 365.
Можно сначала объединить в один файл, затем с ним работать.тогда можно вообще тупо в эксель импортировать и копирнуть пятый столбец и не писать никаких программ ))
...
Рейтинг: 0 / 0
12.04.2016, 11:58
    #39213440
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Shocker.ProDima Tпропущено...

Можно сначала объединить в один файл, затем с ним работать.тогда можно вообще тупо в эксель импортировать и копирнуть пятый столбец и не писать никаких программ ))
Я это и предлагал 19045946
...
Рейтинг: 0 / 0
24.05.2016, 05:36
    #39241805
EspadaLio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Cat2, Опишите пожалуйста подробнее как правильно их включить в код, не могу разобраться в ошибках, которые вылазят.
...
Рейтинг: 0 / 0
24.05.2016, 10:31
    #39241948
EspadaLio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Shocker.Pro,Можно ли еще раз вас побеспокоить.
При работе приведенного кода возникает ошибка необработанного исключения (объект не должен быть нулевым). Как это грамотно обработать?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Private Sub ВыбратьФайлToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ВыбратьФайлToolStripMenuItem.Click

        Dim dlg As Windows.Forms.OpenFileDialog
        Dim strName As String
        Dim regexp As New Regex("[ ]")
        Dim t As Integer
        Dim s() As String

        dlg = New OpenFileDialog()
        dlg.Multiselect = True
        dlg.InitialDirectory = "c:\scripts"
       
 'Открываем диалоговое окно
        If dlg.ShowDialog() = _
        Windows.Forms.DialogResult.OK Then
            For Each strName In dlg.FileNames
                 Using sr As StreamReader = _
                 File.OpenText(strName)
                    'Заводим строковую переменную, в которую будет читаться файл
                    Dim strLine As String
                    i = 1
                    EOF = "False"
                    While (EOF <> "True")
                        strLine = sr.ReadLine()
'Здесь компилятор указывает на ошибку (Необработанное исключение типа "System.ArgumentNullException" в System.dll)
                        s = regexp.Split(strLine)
'Здесь следуя вашему предложению разбиваю строку на массив и записываю (пока что без выделения 5-го элемента) в другой лист.
                        For t = 0 To s.GetUpperBound(0)
                            If String.IsNullOrEmpty(s(t)) Then
                                ListBox2.Items.Add(s(t))
                            End If
                        Next

                        If (strLine <> "") Then
                            ListBox1.Items.Add(strLine)
                            i = i + 1
                        Else
                            EOF = "True"
                        End If
                    End While
                    sr.Close()
                End Using
            Next
        End If
    End Sub


Я все-таки пишу это приложение, так как объем данных большой, далее этот столбец нужно будет преобразовывать в строку и выполнять Фурье-преобразование.
...
Рейтинг: 0 / 0
24.05.2016, 10:43
    #39241960
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
EspadaLioShocker.Pro,Можно ли еще раз вас побеспокоить.
При работе приведенного кода возникает ошибка необработанного исключения (объект не должен быть нулевым). Как это грамотно обработать?
Проверить что записалось в strLine прежде чем использовать.

https://msdn.microsoft.com/ru-ru/library/system.io.streamreader.readline(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2 StreamReader.ReadLine - метод ()

Возвращаемое значение
Type: System.String
Следующая строка из входного потока или значение null , если достигнут конец входного потока.
...
Рейтинг: 0 / 0
24.05.2016, 10:50
    #39241970
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Судя по примерам с MSDN надо заменить
Код: c#
1.
While (EOF <> "True")


на
Код: c#
1.
While (EOF <> "True" and sr.Peek() >= 0)
...
Рейтинг: 0 / 0
24.05.2016, 11:45
    #39242037
EspadaLio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезание нужных данных из массива строк.
Dima T,
Спасибо, ошибка исчезла.
Пустые строки возникают из-за задвоенных пробелов?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вырезание нужных данных из массива строк. / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]