Вверх ↑
Этот топик читают: Гость
Ответов: 10
Рейтинг: 0
#1: 2017-09-28 13:59:39 ЛС | профиль | цитата
Здравствуйте форумчане.
Делаю программку по разбивке строк на подстроки, например:
Creates a blank HTML page\nNew HTML Page Создание документа HTML\nСоздать документ HTML
Creates a file or a directory\nCreate Создание файла или папки\nСоздать

Нужно разбить с такими результатами:
Creates a blank HTML page Создание документа HTML
New HTML Page Создать документ HTML
Creates a file or a directory Создание файла или папки
Create Создать

Add(MainForm,2953706,35,133)
{
Width=489
Height=462
}
Add(StrPart,2649965,273,161)
{
Char="\t"
Point(Left)
Point(Right)
link(onSplit,16685958:doSplit,[(317,167)(317,111)])
link(onPart,14102046:doSplit,[])
}
Add(ListBox,2506861,161,224)
{
Left=10
Top=85
Width=450
Strings=#159:%1\nCannot find this file.\nVerify that the correct path and file name are given. %1\nНе удалось найти этот файл.\nУбедитесь в правильности пути и имени файла.|117:%s\n\nUnsaved changes will be lost. Do you want to continue? %s\n\nНесохранённые изменения будут утеряны. Продолжить?|158:Cannot get the result from the user tool.\nDo you want to retry? Не удалось получить результат из пользовательского инструмента.\nВы хотите повторить попытку?|20:Create... Создать...|87:Creates a blank HTML page\nNew HTML Page Создание документа HTML\nСоздать документ HTML|71:Creates a file or a directory\nCreate Создание файла или папки\nСоздать|
link(onChange,4076381:doText,[])
}
Add(Button,16557233,14,217)
{
Left=195
Top=30
Caption="Открыть"
link(onClick,9206988:doExecute,[])
}
Add(ODialog,9206988,63,217)
{
link(onExecute,2360463:doEvent1,[])
}
Add(ListBox,1214477,476,280)
{
Left=20
Top=250
Width=440
link(onChange,399039:doText,[])
}
Add(Button,7051843,378,343)
{
Left=200
Top=380
Width=65
Caption="Сохранить"
link(onClick,7227638:doExecute,[])
}
Add(ArrayEnum,4619542,175,308)
{
link(onItem,1123478:doEvent1,[])
link(Array,2506861:Array,[])
}
Add(Button,16635239,119,308)
{
Left=205
Top=200
Caption="Начать"
link(onClick,4619542:doEnum,[])
}
Add(Hub,2360463,112,217)
{
OutCount=3
link(onEvent1,2506861:doClear,[(144,223)(144,237)])
link(onEvent2,2506861:doLoad,[(147,230)(147,258)])
link(onEvent3,1214477:doClear,[(301,237)(301,293)])
}
Add(Edit,399039,525,280)
{
Left=380
Top=345
Width=80
Text=""
link(Str,1214477:Count,[(531,268)(514,268)(514,337)(489,337)])
}
Add(Label,3600688,532,231)
{
Left=330
Top=350
Width=42
Height=17
Caption="Строк:"
}
Add(FormatStr,5068234,280,315)
{
Mask="%1\t%2"
link(onFString,15392105:doWork3,[(376,321)])
link(Str1,14102046:Left,[(286,257)(377,257)])
link(Str2,16685958:Left,[(293,226)(335,226)])
}
Add(Hub,1123478,224,308)
{
OutCount=3
link(onEvent1,2649965:doSplit,[(256,314)(256,167)])
link(onEvent2,5068234:doString,[])
link(onEvent3,1130420:doString,[(284,328)(284,356)])
}
Add(StrPart,16685958,329,105)
{
Char="\n"
Point(Left)
Point(Right)
}
Add(StrPart,14102046,371,168)
{
Char="\n"
Point(Left)
Point(Right)
}
Add(FormatStr,1130420,329,350)
{
Mask="%1\t%2"
link(onFString,15392105:doWork2,[(367,356)(367,300)])
link(Str1,14102046:Right,[(335,275)(384,275)])
link(Str2,16685958:Right,[])
}
Add(Label,4901649,154,168)
{
Left=330
Top=175
Width=44
Height=17
Caption="Строк"
}
Add(Edit,4076381,210,224)
{
Left=380
Top=170
Width=80
Text=""
link(Str,2506861:Count,[(216,212)(195,212)(195,281)(174,281)])
}
Add(HubEx,15392105,372,294)
{
Angle=3
link(onEvent,1214477:doAdd,[(376,286)])
}
Add(SDialog,7227638,428,343)
{
Filter=".txt|*.*"
FileName=".txt"
link(onExecute,1214477:doSave,[(468,349)(468,321)])
}


Когда текст в ListBox и нажать Начать, всё вроде работает.
Если текст из ListBox скопировать в текстовой файл и открыть его программой, то результат получается совсем другой. Не пойму в чём проблема.
Может как то можно это реализовать по другому, ведь в строке может быть любое количество подстрок, а не две.

Редактировалось 2 раз(а), последний 2017-09-28 14:39:14
карма: 1

0
vip
#1.1контекстная реклама от партнеров
Ответов: 8886
Рейтинг: 823
#2: 2017-09-28 14:55:10 ЛС | профиль | цитата
Serg456, скорее всего вы не до окончания прочитали справку:
Символы \#, \n, \r, \t, где "#" число от 0 до 255 воспринимаются нашим компилятором как служебные и заменяются в процессе компиляции, поэтому в схеме *.sha их надо избегать или обозначать двойным: "\\"
Посмотрите на схему, которую вы выложили, там в тексте нет \t, а есть %1
В палитре "Строки" есть компонент BlockFind, обратите внимание на него.
карма: 19

0
Ответов: 10
Рейтинг: 0
#3: 2017-09-28 15:06:40 ЛС | профиль | цитата
Леонид, Спасибо за подсказку, а не подскажите как можно реализовать механизм, чтоб в случае не совпадения количества подстрок, строка игнорировалась и не разбивалась, то есть:
Creates a blank HTML page\nNew HTML Page\Create Page Создание документа HTML\nСоздать документ HTML
Получается 3eng-2rus.
карма: 1

0
Ответов: 8886
Рейтинг: 823
#4: 2017-09-28 20:11:48 ЛС | профиль | цитата
Serg456 писал(а):
подскажите как можно реализовать механизм, чтоб в случае не совпадения количества подстрок
Подсчитать это количество и при равенстве записывать их. Схема по ссылке, в *.rar чтобы форум не перевирал не отображаемые символы.

--- Добавлено в 2017-09-28 20:13:32

http://forum.hiasm.com/getfile/38197

Редактировалось 1 раз(а), последний 2017-09-28 20:13:32
карма: 19

0
файлы: 1РазбивкаСтрок.rar [2.5KB] [429]
Ответов: 10
Рейтинг: 0
#5: 2017-09-29 14:00:52 ЛС | профиль | цитата
Леонид, большущие тебе спасибо, а то сам ну ни как, да и в примерах не где вроде не попадалось, а функция нужна во многих моих программках. Я так понимаю что прежде чем обработать текс программой, в нём нужно в любом текстовом редакторе изменить \n на \\n - так как он и вызывает ошибку. При работе с другими программами при поиске и замене ТАБУЛЯТОРА или \t (он находится в конце Eng и началом Rus), не замечал каких либо проблем с компилятором, всё работало нормально.
карма: 1

0
Ответов: 8886
Рейтинг: 823
#6: 2017-09-29 16:15:06 ЛС | профиль | цитата
Serg456, нет, зарезервированные комбинации символов воспринимаются ТОЛЬКО при компиляции *.sha в *.ехе, в т. ч. и в текстах. Когда пользуетесь *.ехе, то ограничений на символы в открываемых из программы текстах нет.
В представленных вами примерах есть и не отражаемый символ "отступ" (код 9), могли быть и другие символы. Если вы пересохраняли ваш текстовой файл через ListBox, Memo в HiAsm, то часть таких символов могла исчезнуть из текста. Тоже надо помнить об этом.
карма: 19

0
6
Сообщение
...
Прикрепленные файлы
(файлы не залиты)