Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
206 / 13 / 2
Регистрация: 10.10.2009
Сообщений: 154
1

Разбить строку на числа, разделенные пробелами

02.10.2011, 22:47. Показов 3969. Ответов 7
Метки нет (Все метки)

Всем доброго времени суток!

Переменные типа String в виде строк состоят из десяти чисел. Числа в строке разделены одним пробелом.

1 41 42 44 84 85 87 985 987 989
1 41 43 44 84 86 87 986 987 990
1 42 43 44 85 86 87 988 989 990
2 3 4 5 88 89 90 130 131 171
2 3 4 6 88 89 91 130 132 172
2 3 4 7 88 89 92 130 133 173

Вопрос, – какой должен быть код (необходим наиболее производительный) для определения каждого числа в строке и перевода его в числовой тип, например Integer?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2011, 22:47
Ответы с готовыми решениями:

Вывести строку, содержащую же слова, но разделенные одним словом «.»
Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести...

Считать из файла числа, разделенные пробелами и переводом на новую строку
При считывании нужно записать каждое число в массив. И лучше всего сначала узнать кол-во этих...

Записать в одну строку конкатенацию (соединение) всех строк из файла, разделенные пробелами
Помогите сделать такую задачу в с++,записать в одну строку конкатинацию(соединение) всех строк...

Считать в несколько массив числа разделенные пробелами из текстового файла
Доброго времени суток, товарищи программисты. Вопрос следующего характера. Как считать числа,...

7
15038 / 6362 / 1726
Регистрация: 24.09.2011
Сообщений: 9,971
02.10.2011, 22:56 2
Не знаю насчет скорости, но наиболее удобно через Split
Visual Basic
1
2
3
4
5
6
7
8
Sub bb()
Dim s$, iArr%(0 To 9), i&, sArr$()
s = "1 41 42 44 84 85 87 985 987 989"
sArr = Split(s)
For i = 0 To 9
    iArr(i) = sArr(i)
Next
End Sub
0
206 / 13 / 2
Регистрация: 10.10.2009
Сообщений: 154
02.10.2011, 23:04  [ТС] 3
Спасибо за отзыв. Кода не много, возможно будет быстро.
0
15038 / 6362 / 1726
Регистрация: 24.09.2011
Сообщений: 9,971
02.10.2011, 23:45 4
Так еще быстрее на несколько %
Visual Basic
1
2
3
4
5
6
7
8
Sub bb1()
Dim s$, iArr&(0 To 9), i&, x
s = "1 41 42 44 84 85 87 985 987 989"
For Each x In Split(s)
    iArr(i) = x
    i = i + 1
Next
End Sub
Добавлено через 20 минут
Все-таки Split - медленная функция. Так почти в 2 раза быстрее (bb - 13,8 мкс, bb1 - 13,0 мкс, bb2 - 7,1 мкс)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub bb2()
Dim s$, iArr&(0 To 9), i&, j&, k&
s = "1 41 42 44 84 85 87 985 987 989"
j = 1
For i = 0 To 8
    k = InStr(j, s, " ")
    iArr(i) = Mid$(s, j, k - j)
    j = k + 1
Next
iArr(9) = Mid$(s, j)
End Sub
1
206 / 13 / 2
Регистрация: 10.10.2009
Сообщений: 154
03.10.2011, 00:12  [ТС] 5
Есть ещё вариант без цикла. Для Split:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub bbb()
Dim s$, iArr%(0 To 9), i&, sArr$()
s = "1 41 42 44 84 85 87 985 987 989"
sArr = Split(s)
 
   iArr(0) = sArr(0)
   iArr(1) = sArr(1)
   iArr(2) = sArr(2)
   iArr(3) = sArr(3)
   iArr(4) = sArr(4)
   iArr(5) = sArr(5)
   iArr(6) = sArr(6)
   iArr(7) = sArr(7)
   iArr(8) = sArr(8)
   iArr(9) = sArr(9)
End Sub
Скорость должна увеличится.
0
11271 / 3630 / 650
Регистрация: 13.02.2009
Сообщений: 10,834
03.10.2011, 08:52 6
bb - 13,8 мкс, bb1 - 13,0 мкс, bb2 - 7,1 мкс
В данном случае неужели это критично?
Всё зависит от обёма информации, которую надо обработать.
Сколько строк всего? миллион? Два?
Кстати никто не спросил откуда берётся массив.
Надо ли его разбить сначала на строки или будет считываться построчно
0
206 / 13 / 2
Регистрация: 10.10.2009
Сообщений: 154
03.10.2011, 11:43  [ТС] 7
В текстовом файле записанный двумерный массив, имеющий более миллиона строк.

1 2 3 4 45 46 47 88 89 130
1 2 3 5 45 46 48 88 90 131
1 2 3 6 45 46 49 88 91 132
1 2 3 7 45 46 50 88 92 133
1 2 3 8 45 46 51 88 93 134
1 2 3 9 45 46 52 88 94 135
1 2 3 10 45 46 53 88 95 136
1 2 3 11 45 46 54 88 96 137
1 2 3 12 45 46 55 88 97 138
1 2 3 13 45 46 56 88 98 139
1 2 3 14 45 46 57 88 99 140
1 2 3 15 45 46 58 88 100 141
1 2 3 16 45 46 59 88 101 142
1 2 3 17 45 46 60 88 102 143
1 2 3 18 45 46 61 88 103 144
1 2 3 19 45 46 62 88 104 145

Код для VB 2008

VB.NET
1
2
3
4
5
6
7
8
FileOpen(1, "В:\Massiv.txt", OpenMode.Input)
 
   For A = 1 To 1221759
      For J = 1 To 10
         Input(1, G(A, J))
      Next J
    Next A
If EOF(1) Then FileClose(1)
читает массив из файла. Однако из-за большого размера массива чтение проходит не быстро.

В VB 2008 такое чтение можно ускорить.

Код

VB.NET
1
 Dim S() As String = IO.File.ReadAllLines("D:\MassivGG.txt")
читает быстро, однако построчно. Остаётся разшифровать содержание строк.


Код

VB.NET
1
2
3
4
5
6
7
8
9
10
11
Dim S() As String = IO.File.ReadAllLines("D:\MassivGG.txt")
        For AAA = 0 To 1221758
            J = 1
            For I = 0 To 8
                K = InStr(J, S(AAA), " ")
                G(AAA + 1, I + 1) = Mid$(S(AAA), J, K - J)
                J = K + 1
            Next
            G(AAA + 1, 10) = Mid$(S(AAA), J)
 
        Next AAA
читает каждое число в массиве уже быстро. Если расписать цикл по I, то очевидно чтение будет ещё быстрее.
0
11271 / 3630 / 650
Регистрация: 13.02.2009
Сообщений: 10,834
03.10.2011, 19:23 8
Для таких размерчиков где-то был пример считывания блоками.
Вот там, действительно, скорость была впечатляющая!
Где-то сохранял не могу найти.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2011, 19:23

Два числа, разделенные пробелами, записать в две целочисленные переменные
В данной строке записаны два целых числа, ограниченные пробелом. static void Main(string args)...

Вывести на экране все числа, разделенные пробелами, от 1 до 100 в виде таблицы
Добрый день, уважаемые программисты. Помогите пожалуйста разобраться с циклом For Задача ниже:...

В текстовом файле ‘1.dat’ хранятся натуральные числа, разделенные пробелами. Вывести количество цифр второг
В текстовом файле ‘1.dat’ хранятся натуральные числа, разделенные пробелами. Вывести количество...

В текстовом файле ‘1.dat’ хранятся натуральные числа, разделенные пробелами. Вывести запись цифр первого ч
Помогите с кодом


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru