Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/48: Рейтинг темы: голосов - 48, средняя оценка - 4.54
7 / 7 / 0
Регистрация: 09.04.2013
Сообщений: 120

Деление строки Split-om в VB

11.04.2013, 07:26. Показов 10011. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите, пожалуйста, очень начинающему.

Начал писать свою первую програмку и вот сразу проблемка:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Class Form1
Dim fileLas As String
 Private Sub ВыходToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ВыходToolStripMenuItem.Click
        Me.Close()
    End Sub
    Private Sub ОткрытьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОткрытьToolStripMenuItem.Click
 
        OpenFileDlg.Filter = "Las файлы (*.las)|*.las|Текстовый документ (*.txt)|*.txt|Все файлы (*.*)|*.*"
        OpenFileDlg.Title = "Загрузка файла каратажа"
        OpenFileDlg.InitialDirectory = "D:\work\"
        OpenFileDlg.FileName = ""
        OpenFileDlg.ShowDialog()
        fileLas = OpenFileDlg.FileName
    End Sub
 
    Private Sub TxtBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxtBox.TextChanged
        TxtBox.Text = fileLas
        '  TxtBox.Text = Split("OpenFileDlg.FileName", "/")  --  вот здесь Невозможно преобразовать значение типа 1-мерный массив из String в String
    End Sub
Искал, пишут, что нужно преобразовать из массива в строку, вот так и не понял как это сделать


В идеале нужно разбить по столбцам файл типа:
шапка из N строк (N1 различно)
10 15648,5654 15464,34
20 68464,64 4565,354
30 8788799,55 789879,0
и так далее (тоже N2)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2013, 07:26
Ответы с готовыми решениями:

Деление файла используя Split
Я записываю в файл сведения хеша другого файла. в конце хеша ставим *. И на новой строке записывается путь к самому файлу. Нужно...

Цикл for и деление на массивы командой split
Добрый вечер, есть вот такой html шаблон <tr class="itemBlock"> <td> 44-46 <td>170-176 <td> <td>шт,...

Метод Split(). Деление на предложения и слова
У меня есть следующее предложение - "b, c". Нужно создать List<List<string>>, т.е парсер текста: текст делится на предложения, предложение...

12
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
11.04.2013, 08:05
ну вы смотрели бы что возвращает та или иная функция. Split вернёт массив строк. А вы пытаетесь результат присвоить Text'у
0
 Аватар для Farzy
32 / 32 / 0
Регистрация: 14.01.2013
Сообщений: 75
11.04.2013, 11:38
VB.NET
1
2
3
4
5
 'Примерчик сплита
        Dim drop() As String = Split(OpenFileDlg.FileName, "/")
        MsgBox(drop(0)) ' Будет писать то, что до "/"
        MsgBox(drop(1)) ' Будет писать то, что после "/"
    End Sub
0
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
11.04.2013, 13:18
VB.NET
1
2
3
4
5
6
7
8
9
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Читаем все строки в массив:
        Dim Mass() As String = IO.File.ReadAllLines(OpenFileDlg.FileName, System.Text.Encoding.Default)
        Dim A, B, C As String
        'Чтобы разделить 1 строку:
        A = Split(Mass(0), " ")(0) 'Mass(0) - 1 строка.
        B = Split(Mass(0), " ")(1)
        C = Split(Mass(0), " ")(2)
    End Sub
0
7 / 7 / 0
Регистрация: 09.04.2013
Сообщений: 120
12.04.2013, 10:28  [ТС]
Цитата Сообщение от Монфрид Посмотреть сообщение
ну вы смотрели бы что возвращает та или иная функция. Split вернёт массив строк. А вы пытаетесь результат присвоить Text'у
Вот ведь в этом и проблема, как перевести массив в строку, особо не мудрствуя лукаво

Добавлено через 32 минуты
Спасибо, Jason, уже читал твои ответы Считывание текста из текстового файла

Только когда пытался их применить, VB ругалась на массивы

Цитата Сообщение от Jason Посмотреть сообщение
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
* * * * Dim Mass() As String = IO.File.ReadAllLines("D:\1.txt") 'Если прочитать все строки в массив
* * * * Dim Year(UBound(Mass)) As String 'Запишем сюда год (я так понял это 1 столбец).
* * * * For i = 0 To UBound(Mass) Step 1 'В цикле брать каждую строку и выделяем в массив Year год.
* * * * * * Year(i) = Split(Mass(i), " ")(0) '0 - получаем год т.к. после него стоит пробел.
* * * * Next
* * * * Dim ID(UBound(Mass)) As String
* * * * 'А где там 2 столбец? Если это от пробела до пробела:
* * * * For i = 0 To UBound(Mass) Step 1
* * * * * * ID(i) = Split(Mass(i), " ")(1) ' Это получит 2 столбец и т.д.
* * * * Next
* * End Sub
ID(i) = Split(Mass(i), " ")(1) - Индекс находился вне границ массива

К моей теме

Как теперь увидеть эти разделенные столбцы, например в TextBox, или для этого что-то другое использовать?

Понимаю, что надо писать цикл, но не знаю как и где.
0
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
12.04.2013, 18:12
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Mass() As String = IO.File.ReadAllLines("D:\1.txt") 'Читаем построчно в массив.
        Dim ID(Mass.Length - 1), X(Mass.Length - 1), Y(Mass.Length - 1) As String 'Столбцы (я так понял это координаты и их id).
        For i = 0 To Mass.Length - 1 Step 1
            ID(i) = Mass(i).Split(" ")(0) 'Заполняем 1 столбец.
            X(i) = Mass(i).Split(" ")(1) 'Заполняем 2 столбец.
            Y(i) = Mass(i).Split(" ")(2) 'Заполняем 3 столбец.
        Next
        RichTextBox1.Text = Join(ID, vbCrLf) 'Выводим массив в ртб (эл. с новой строки).
        RichTextBox2.Text = Join(X, vbCrLf) 'Выводим массив в ртб (эл. с новой строки).
        RichTextBox3.Text = Join(Y, vbCrLf) 'Выводим массив в ртб (эл. с новой строки).
    End Sub
Добавлено через 3 минуты
Это если тхт файл такого содержания:
ID X Y
т.е. как ваш пример:
10 15648,5654 15464,34
20 68464,64 4565,354
30 8788799,55 789879,0
1
 Аватар для Евгений12
60 / 58 / 10
Регистрация: 16.02.2013
Сообщений: 146
12.04.2013, 20:09
Если значешь количество строк в файле, так думаю быстрее будет:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
Dim Mass As New System.IO.StreamReader("D:\1.txt", System.Text.Encoding.Default)
Dim line() as String
Dim sep as Char = " "
Dim ID as Long
Dim X, Y as Double
For i As Long = 1 To Nstr 'Nstr-количество строк
line = Split(sr.ReadLine(), sep)
ID = line(0)
X = line(1)
Y = Line(2)
next i
0
7 / 7 / 0
Регистрация: 09.04.2013
Сообщений: 120
15.04.2013, 05:32  [ТС]
Цитата Сообщение от Евгений12 Посмотреть сообщение
Если значешь количество строк в файле, так думаю быстрее будет:
Хорошо, но количество строк от 10-ков до 100-тен


Цитата Сообщение от Jason Посмотреть сообщение
X(i) = Mass(i).Split(" ")(1)
вот опять та же ошибка: Индекс находился вне границ массива

??? Что это?

Добавлено через 13 минут
ругается именно на (1)
0
 Аватар для Евгений12
60 / 58 / 10
Регистрация: 16.02.2013
Сообщений: 146
15.04.2013, 12:28
Цитата Сообщение от Илья888 Посмотреть сообщение
количество строк от 10-ков до 100-тен
т.е. ты не знаешь количество строк

Если не знаешь, попробуй так:

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim mass() As String = IO.File.ReadAllLines("путь к файлу", System.Text.Encoding.Default)
        Dim line()
        Dim tab As String = Chr(9)
        Dim ID as Long
        Dim X, Y as Double
 
        For i = 0 To UBound(mass)
            line = Split(mass(i), tab)
            ID = line(0)
            X = line(1)
            Y = line(2)
        Next
    End Sub
Такой метод не приемлем если длинна считываемого файла более 2 Гб, ну или там файл весит больше чем у тебя памяти на компе, в таком случае лучше использовать построчное считывание как указано в моем предыдущем посте.
1
7 / 7 / 0
Регистрация: 09.04.2013
Сообщений: 120
16.04.2013, 10:35  [ТС]
Исправить ошибку помогла замена
ID(i) = Mass(i).Split(" ")(0) на ID(i) = Mass(i).Split(CChar("Chr(9)"))(0)
для X и Y в т.ч.
0
7 / 7 / 0
Регистрация: 09.04.2013
Сообщений: 120
17.04.2013, 12:10  [ТС]
Подскажите как теперь это записать в файл

PureBasic
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Option Strict On
Option Explicit On
Imports VB = Microsoft.VisualBasic
Imports System.Math
Imports System.IO
Imports System
Public Class Form1
    Inherits System.Windows.Forms.Form
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
    End Sub
 
    Private Sub ВыходToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ВыходToolStripMenuItem.Click
        Me.Close()
    End Sub
 
    Private Sub ОткрытьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОткрытьToolStripMenuItem.Click
        OpenFileDlg.Filter = "Las файлы (*.las)|*.las|Текстовый документ (*.txt)|*.txt|Все файлы (*.*)|*.*"
        OpenFileDlg.Title = "Загрузка файла каратажа"
        OpenFileDlg.InitialDirectory = "D:\work\"
        OpenFileDlg.FileName = ""
        OpenFileDlg.ShowDialog()
        TextBox1.Text = OpenFileDlg.FileName
 
        Dim Mass() As String = IO.File.ReadAllLines(OpenFileDlg.FileName)
        Dim ID(Mass.Length - 1), X(Mass.Length - 1), Y(Mass.Length - 1), Z(Mass.Length - 1), T(Mass.Length - 1) As String
 
 
        Dim tab As String = Chr(9)
 
        For i = 0 To Mass.Length - 1 Step 1
            ID(i) = Mass(i).Split(CChar(";"))(0) 'Заполняем 1 столбец.
            X(i) = Mass(i).Split(CChar(";"))(1) 'Заполняем 2 столбец.
            Y(i) = Mass(i).Split(CChar(";"))(2) 'Заполняем 3 столбец.
            Z(i) = Mass(i).Split(CChar(";"))(3)
            T(i) = Mass(i).Split(CChar(";"))(4)
        Next
 
        RichTextBox1.Text = Join(ID, vbCrLf)
        RichTextBox2.Text = Join(X, vbCrLf)
        RichTextBox3.Text = Join(Y, vbCrLf)
        RichTextBox4.Text = Join(Z, vbCrLf)
        RichTextBox5.Text = Join(T, vbCrLf)
 
    End Sub
 
    Private Sub СоздатьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles СоздатьToolStripMenuItem.Click
        Dim myStream As Stream
        Dim saveFileDialog1 As New SaveFileDialog()
 
        saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
        saveFileDialog1.FilterIndex = 2
        saveFileDialog1.RestoreDirectory = True
 
        If saveFileDialog1.ShowDialog() = DialogResult.OK Then
            myStream = saveFileDialog1.OpenFile()
            If (myStream IsNot Nothing) Then
                RichTextBox1.SaveFile("SaveFileDlg.FileName", RichTextBoxStreamType.RichText)
                RichTextBox2.SaveFile("SaveFileDlg.FileName", RichTextBoxStreamType.RichText)
                RichTextBox3.SaveFile("SaveFileDlg.FileName", RichTextBoxStreamType.RichText)
 
 
            End If
        End If
 
    End Sub
End Class
0
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
18.04.2013, 21:47
Используй выделение кода VB.NET, а не Basic4GL.
Цитата Сообщение от Илья888 Посмотреть сообщение
Подскажите как теперь это записать в файл
Как надо записать, массивы в разные документы или все обьеденить как было до этого?
0
7 / 7 / 0
Регистрация: 09.04.2013
Сообщений: 120
22.04.2013, 10:42  [ТС]
Подскажите, как сделать чтобы выводимые в excel значения были числовыми, а не текстовыми

PureBasic
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
46
47
48
49
50
51
52
53
 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
 
        OpenFileDlg.Filter = "Las файлы (*.las)|*.las|Текстовый документ (*.txt)|*.txt|Все файлы (*.*)|*.*"
        OpenFileDlg.Title = "Загрузка файла каратажа"
        OpenFileDlg.InitialDirectory = "D:\work\"
        OpenFileDlg.FileName = ""
        OpenFileDlg.FilterIndex = 3
        OpenFileDlg.ShowDialog()
        TextBox1.Text = OpenFileDlg.FileName
 
 
        Dim oExcel As Microsoft.Office.Interop.Excel.Application
        Dim oBook As Microsoft.Office.Interop.Excel.Workbook
        Dim oSheet As Microsoft.Office.Interop.Excel.Worksheet
 
 
 
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        oSheet = oBook.Worksheets(1)
 
        oSheet.Cells().NumberFormat = "General"
 
        oExcel.Visible = True
 
 
 
 
 
        RichTextBox1.Text = ""
        RichTextBox2.Text = ""
        RichTextBox3.Text = ""
        RichTextBox4.Text = ""
        RichTextBox5.Text = ""
 
        Dim Mass() As String = IO.File.ReadAllLines(OpenFileDlg.FileName, Encoding.Default)
        Dim Ub = Mass.Length - 1
        Dim strSplit() As String
        Dim ubSplit As Integer
 
        For j = 0 To Ub
            strSplit = Split(Mass(j), ";")
            ubSplit = strSplit.Length
 
            RichTextBox1.Text = RichTextBox1.Text & strSplit(0) & Chr(10)
            RichTextBox2.Text = RichTextBox2.Text & strSplit(1) & Chr(10)
            RichTextBox3.Text = RichTextBox3.Text & strSplit(2) & Chr(10)
 
            oSheet.Range("A" & CStr(j + 1).Trim).Resize(1, ubSplit).Value = strSplit
        Next
 
        oExcel = Nothing
    End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2013, 10:42
Помогаю со студенческими работами здесь

Метод split - выдается ошибка Uncaught TypeError: Cannot read property 'split' of undefined
Вот кусок кода CheckLinkText: function(val, f){ if(!$('#attach_lnk_stared').val()){ matches = val.split('http://'); url =...

Split строки в MSSQL
Проект по БД, Тема Приемная комиссия, Я вывожу на datagridview1 список подавших документы, при выделении нескольких людей, я должен при...

Разделение строки через split()
Есть строка содержащая произвольно количество не строго типизированных подстрок разделенных спецсимволом | Как записать регулярное...

Split строки в двухмерный массив
Есть некая строка string str= "Hello|world\n Im|alive" (неопределённая) Как можно её спарсить, чтоб массив string выглядел...

Разделение строки на две части Split
Здравствуйте. Подскажите пожалуйста начинающему программисту, как по нажатию на кнопку button, из загруженного текстового файла строку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru