powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вырезание нужных данных из массива строк.
25 сообщений из 35, страница 1 из 2
Вырезание нужных данных из массива строк.
    #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
Вырезание нужных данных из массива строк.
    #39213260
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Образец обрабатываемых данных нам самим придумать?
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213265
EspadaLio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, не прикрепила сразу.
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213268
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно
а) удалить все задвоения пробелов в строке
б) превратить строку в массив с помощью Split
d) извлечь пятый элемент
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213270
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНужно
а) удалить все задвоения пробелов в строке
б) превратить строку в массив с помощью Split
А зачем удалять задвоения пробелов перед Split?
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #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
Вырезание нужных данных из массива строк.
    #39213281
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да, вариант StringSplitOptions.RemoveEmptyEntries
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #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
Вырезание нужных данных из массива строк.
    #39213311
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это текст с разделителем "пробел", то не надо удалять задвоения пробелов. Два пробела подряд означают что между ними пустая строка.
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213321
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсли это текст с разделителем "пробел", то не надо удалять задвоения пробелов. Два пробела подряд означают что между ними пустая строка.загляни в приложенный файл - там форматирование пробелами, а не разделитель пробел
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213339
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProDima TЕсли это текст с разделителем "пробел", то не надо удалять задвоения пробелов. Два пробела подряд означают что между ними пустая строка.загляни в приложенный файл - там форматирование пробелами, а не разделитель пробел
Не заметил что файл дали. Там выровнено пробелами. Надо просто вырезать подстроку из 6 символов начиная с 16-го.
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213345
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНадо просто вырезать подстроку из 6 символов начиная с 16-го.это плохой совет. Мы не знаем, как формируется файл, возможно, он может выглядеть иначе при увеличении значности какого-нибудь из столбцов. Split будет гораздо универсальнее (хотя, возможно непринципиально, медленнее)
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213357
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если надо разово, то проще файл переименовать в TXT и экселем открыть как с колонками фиксированной ширины.
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213364
EspadaLio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Таких таблиц довольно много. Минимум 365. Не знаю, подойдет ли тут разовый рецепт.
Пробую со сплитом.
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #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
Вырезание нужных данных из массива строк.
    #39213417
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProDima TНадо просто вырезать подстроку из 6 символов начиная с 16-го.это плохой совет. Мы не знаем, как формируется файл, возможно, он может выглядеть иначе при увеличении значности какого-нибудь из столбцов. Split будет гораздо универсальнее (хотя, возможно непринципиально, медленнее)
Не согласен. Описание формата нет, поэтому приходится гадать. В данном случае я вижу текст с колонками фиксированной ширины. Если так, пробелов между значениями может вообще не быть. Например колонка 6 символов и и значение 6.
В конкретном примере только числа, а в общем случае могут быть строки как с пробелами внутри, так и пустые. И тут Split() будет вообще не в тему.
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213422
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proвозможно, он может выглядеть иначе при увеличении значности какого-нибудь из столбцов
Возможно нет, как выше написал - просто исчезнет пробел.
Чтобы не гадать - для данного случая я бы посоветовал добавить контроль количества значений, т.е. прочитали строку, разбили на значения и после проверка что в результате ровно 15 значений.
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213432
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EspadaLioDima T, Таких таблиц довольно много. Минимум 365.
Можно сначала объединить в один файл, затем с ним работать.
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213438
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TEspadaLioDima T, Таких таблиц довольно много. Минимум 365.
Можно сначала объединить в один файл, затем с ним работать.тогда можно вообще тупо в эксель импортировать и копирнуть пятый столбец и не писать никаких программ ))
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39213440
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProDima Tпропущено...

Можно сначала объединить в один файл, затем с ним работать.тогда можно вообще тупо в эксель импортировать и копирнуть пятый столбец и не писать никаких программ ))
Я это и предлагал 19045946
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #39241805
EspadaLio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2, Опишите пожалуйста подробнее как правильно их включить в код, не могу разобраться в ошибках, которые вылазят.
...
Рейтинг: 0 / 0
Вырезание нужных данных из массива строк.
    #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
Вырезание нужных данных из массива строк.
    #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
Вырезание нужных данных из массива строк.
    #39241970
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по примерам с MSDN надо заменить
Код: c#
1.
While (EOF <> "True")


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


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