Форум программистов, компьютерный форум, киберфорум
Наши страницы
Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/10: Рейтинг темы: голосов - 10, средняя оценка - 4.80
eg01st
2 / 2 / 1
Регистрация: 16.11.2010
Сообщений: 84
1

Mobile Basic: как найти длину строки

11.10.2012, 04:20. Просмотров 1952. Ответов 13
Метки нет (Все метки)

Не нашел в списке такого ЯП, думаю, в этом разделе будет правильно задать вопрос. Вообщем, есть код, который позволяет выводить кириллицу в строках на экран:

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub main
 a$ = "это моя контрольная строка"
r$=""
for i% to len(a$)
a1$ = mid(a$, i%, 1)
b% = asc(a1$)
if a1$<> " " then
r$ = r$ + chr$(992+b%)
else
r$= r$+" "
endif
next i%
print r$
end

проблема в поиске длины строки len(a$). В документации написано, что длина находится именно так, но в реальности - нет. Подскажите, это мои кривые руки, или есть ещё способы достать длину строки?

Добавлено через 19 минут
Прошу удалить, нашел свой косяк.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 04:20
Ответы с готовыми решениями:

Где скачать Mobile basic
У когонибудь есть Mobile basic для компьютера, или кто нибуть знает где его скачать?

Найти в файле максимальную длину строки и вывести в новый файл все строки, имеющую такую длину
Товарищи, простите что обращаюсь. Кому не сложно, помогите (решите) хоть сколько нибудь из этих 3...

Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую длину
Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую...

Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую длину
Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую...

Как найти длину строки String^ и реверсировать её?
В приложении Windiws Forms мне надо найти длину строки и реверсировать её. Как это можно сделать? Я...

13
Апострофф
Заблокирован
11.10.2012, 07:13 2
Цитата Сообщение от eg01st Посмотреть сообщение
Прошу удалить, нашел свой косяк.
Ну уж нет!
eg01st, делись открытием
0
Catstail
Модератор
24570 / 12483 / 2278
Регистрация: 12.02.2012
Сообщений: 20,263
11.10.2012, 10:11 3
Цитата Сообщение от eg01st Посмотреть сообщение
for i% to len(a$)
- это что? Правильно:

Visual Basic
1
for i%=1 to len(a$)
1
eg01st
2 / 2 / 1
Регистрация: 16.11.2010
Сообщений: 84
14.10.2012, 02:33  [ТС] 4
угу, я о том же, вот только даже после этого - все равно ошибка в строке
Visual Basic
1
a1$ = mid$(a$, i%, 1)


upd: снова невнимательность, поставил for i% = 0 to len(a$), потом 0 сменил на 1, работает. Благодарен за ответ.

Добавлено через 22 часа 59 минут
Не буду плодить тем, спрошу здесь.

Есть проблема с выводом кириллицы в приложениях, функция выше - вроде как лекарство, почти все правильно выводит, но проблема с большими буквами, и самое главное - с цифрами и знаком точки и запятой. Пытался сделать конструкцию типа
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ConvToKir:
r$=""
for i% = 1 to len(a$)
a1$ = mid$(a$, i%, 1)
if a1$ <> "," or a1$ <>  "." or a1$ <> "1" or a1$ <> "2" or a1$ <> "3" or a1$ <> "4"  then  rem не работает
b% = asc(a1$)
else
r$= r$+a1$
endif
if a1$<> " " then
r$ = r$ + chr$(992+b%)
else r$= r$+" "
endif
 
next i%
print r$
но ругается на else после b% = asc(a1$). Буду благодарен за помощь.
0
14.10.2012, 02:33
Catstail
Модератор
24570 / 12483 / 2278
Регистрация: 12.02.2012
Сообщений: 20,263
14.10.2012, 10:18 5
Цитата Сообщение от eg01st Посмотреть сообщение
но ругается на else после b% = asc(a1$).
- лучше записывать это вот так:

Visual Basic
1
2
3
4
if a1$<> " " then
r$ = r$ + chr$(992+b%)
else: r$= r$+" "
endif
а еще лучше - вот так:

Visual Basic
1
2
3
4
5
if a1$<> " " then
   r$ = r$ + chr$(992+b%)
else 
   r$= r$+" "
end if
Кстати, а в каком бэйсике ты все это запускаешь? По-моему, аргумент chr$ не может превышать 255...
0
eg01st
2 / 2 / 1
Регистрация: 16.11.2010
Сообщений: 84
15.10.2012, 03:00  [ТС] 6
Ну да, с пробелом работает, но надо же ещё цифры, точки и запятые.

Запускаю в MobileBasic 2.2 build 14999.

Добавлено через 11 часов 2 минуты
Ещё вопрос: в Mobile Basic вообще возможно реализовать чтение из файла? Мы уже вдвоем с одногрупником пытаемся это реализовать. Проблема в том, что оператор input считывает только ту информацию и файлы, которые создавались именно в этом приложение, то есть нельзя просто подсунуть ему текстовый файл и выполнить
PureBasic
1
2
3
4
5
6
sub main
st$ = ""
open #1, "tst.txt", "output" 
input #1, st$
print st$
end
Выбивает ошибку 512 "Ошибка ввода-вывода" в строке input #1, st$
0
Pro_grammer
Модератор
6222 / 2309 / 450
Регистрация: 24.04.2011
Сообщений: 4,128
Записей в блоге: 10
15.10.2012, 07:52 7
Цитата Сообщение от eg01st Посмотреть сообщение
Проблема в том, что оператор input считывает только ту информацию и файлы, которые создавались именно в этом приложение, то есть нельзя просто подсунуть ему текстовый файл и выполнить
Это свойство мидлета - есть понятие пространства его выполнения.Так задумано в MIDP, что не каждое приложение может обратиться к любому файлу за рамками мидлета. А мидлет, который генерирует MobileBasic дважды неполноценный - это Бэйсик код, который сам содержится внутри java -интерпретатора бэйсика. Полная свобода при написании полноценных мидлетов только у Java программиста. Почти полная если программировать на MidletPascal. К стати рекомендую - и бесплатно, большое русскоязычное сообщество, которое развивает новые версии, куча библиотек. И главное - на компьютере не нужно устанавливать JDK и вообще ни какой инструмент, связанный с разработкой Java ME программ, а только саму среду MidletPascal. И создаются настоящие приложения, без интерпретации, минимальные по размеру.
Правда там классический Паскаль, а не Бэйсик, но вряд ли это обстоятельство может быть серьезным препятствием.
1
eg01st
2 / 2 / 1
Регистрация: 16.11.2010
Сообщений: 84
15.10.2012, 11:28  [ТС] 8
Дело в том, что есть предмет в универе, работа с MobileBasic - это из заданий, которое надо выполнить. К сожалению препод сам не очень-то хорошо его знает. Да и если бы был выбор - я бы давно уже стал бы искать альтернативу. За то количество goto в коде моей программы я попаду в ад)
Ладно, с чтением с файла понятно. А есть ли таблица, на которой указан код каждого символа? По идее, если знать код запятой - то в строках можно ставить символ, который после прогонки процедурой выше - станет запятой, ну и тд.
0
Pro_grammer
Модератор
6222 / 2309 / 450
Регистрация: 24.04.2011
Сообщений: 4,128
Записей в блоге: 10
15.10.2012, 11:53 9
Цитата Сообщение от eg01st Посмотреть сообщение
А есть ли таблица, на которой указан код каждого символа?
Таблица стандартная, Юникод, в Интернетах встречается. Коды русских букв В Unicode ряд А—Я занимает индексы 1040–1071, ряд а—я — индексы 1072–1103, большое Ё занимает позицию 1025, а маленькое ё — 1105. Русские буквы изображаются 2мя байтами. Можно сделать так: Превратить dec код русской буквы в hex код, он будет из 3 символов, последние два-код первого байта, а первый-второго.
"Дискриминированы" только знаки русского алфавита, остальные знаки имеют те же коды, что и в обычной Win кодировке. Просто надо поставить условие - преобразовывать по вашим правилам только коды >1000 и всё.
0
eg01st
2 / 2 / 1
Регистрация: 16.11.2010
Сообщений: 84
15.10.2012, 18:52  [ТС] 10
Вообщем это писец. Почитал ответ, попробовал условие когда b > 1000, не проканало, но удалось сделать так:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub main
a$="1. устройство, в котором сигналы" 
r$=""
for i% = 1 to len(a$)
a1$ = mid$(a$, i%, 1)
b% = asc(a1$)
if b% > 52 then
r$ = r$ + chr$(992+b%)
else
r$= r$+ a1$
endif
next i%
print r$
end
Почти все нормально отображается, но из-за идиотской кодировки не проканывает "в" "г" и "а" (может быть ещё что-то), бейсик как-то очень заумно кодирует кириллицу, выходит что "в" он видит как "2", "г" как "3", "а" как "0". Пытался поставить условие типа
PureBasic
1
2
3
4
if (b% > 52) and (a1$ <>"0") and (a1$ <>"1") and (a1$ <>"2") and (a1$ <>"3") then
r$ = r$ + chr$(992+b%)
else
r$= r$+ a1$
но все остается так же.
Кликните здесь для просмотра всего текста
Блин, ну почему препод не сказал это сделать на Джаве? там же явно нет таких банальных проблем(
0
Pro_grammer
Модератор
6222 / 2309 / 450
Регистрация: 24.04.2011
Сообщений: 4,128
Записей в блоге: 10
15.10.2012, 21:28 11
Цитата Сообщение от eg01st Посмотреть сообщение
Блин, ну почему препод не сказал это сделать на Джаве? там же явно нет таких банальных проблем(
Кодировка Юникод как раз и используется для работы с Джавой ME! Она другую не понимает - это же кроссплатформенное решение, стандарт.
Я вот только не пойму, зачем вы строку свою пихаете в Вин кодировке? Что, сразу её запостить в Юникоде не судьба? Обычно в рабочем пространстве мидлета делают файл ресурсов специальный с текстом или данными. Так весь текст делается в Юникоде для совместимости. Там в комплекте вроде и пример есть чтения-запись информации? Просто давно это было, не помню уже.
0
eg01st
2 / 2 / 1
Регистрация: 16.11.2010
Сообщений: 84
16.10.2012, 00:10  [ТС] 12
Pro_grammer, если Вы покажете мне как читать с файла, и маленький пример с Юникодом, я буду очень благодарен! В примере чтение не работает, я уже спрашивал выше, говорят, что средствами Mobile Basic'а это нельзя сделать.
 Комментарий модератора 
Блины - национальное русское блюдо, но отношения к теме не имеют!
Используйте их по назначению
0
Pro_grammer
Модератор
6222 / 2309 / 450
Регистрация: 24.04.2011
Сообщений: 4,128
Записей в блоге: 10
16.10.2012, 08:18 13
Цитата Сообщение от eg01st Посмотреть сообщение
В примере чтение не работает, я уже спрашивал выше, говорят, что средствами Mobile Basic'а это нельзя сделать.
Дело в том, что у меня уже давно нет этого MobBasic а, да и занимался я им с недельку, пока не понял, что баловство.
С чтением вы не поняли, нельзя прочитать произвольный файл с папки телефона, а тот, что записан в свой мидлет конечно можно.
Но в вашем примере с первого взгляда видно, что :

PureBasic
1
2
3
4
5
6
sub main
st$ = ""
open #1, "tst.txt", "output" 
input #1, st$
print st$
end
файл вы открываете на Запись, но пытаетесь Считать из него!
Открывать надо как то так
PureBasic
1
OPEN #1,"tst.txt","INPUT"
Перед этим попробуйте создать-coхранить файл в Юникоде и добавить его в Workspace, там вроде последняя папка для разных файлов.
0
eg01st
2 / 2 / 1
Регистрация: 16.11.2010
Сообщений: 84
17.10.2012, 02:41  [ТС] 14
Я пытался как с input, так и output, файл я само-собой добавлял в проект в other. Объясните пожалуйста, как записать строку в Юникоде?

С Юникодом вроде дошло.

Добавлено через 15 минут
upd:
С Юникодом вроде дошло, когда сохраняешь файл, там есть выбор кодировки. Но вот как потом выдрать текст из этого файла в Юникод формате - не пойму. Мне хотя бы привести кодировку в порядок, на чтение именно из файла никто не настаивает (самому интересно сделать).

Добавлено через 15 часов 27 минут
Никто не курсе чтоль?
0
17.10.2012, 02:41
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2012, 02:41

Как найти длину наименьшей строки в данном массиве ?
Как найти длину наименьшей строки в данном массиве char??? const int MAX=10000; int main()...

Найти длину той части строки s1, которая содержит только символы из строки s2
Необходимо реализовать функцию, которая находит длину той части строки s1, которая содержит только...

В текстовом файле найти длину самой длинной строки, и вывести на экран все строки данной длины
В данном текстовом файле найти длину самой длинной строки и вывести на экран все строки данной...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru