Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 22.01.2018
Сообщений: 8

Как лучше выдернуть значение из строки в котором эти значения делятся (сепаратором ::) или может быть одно

22.01.2018, 22:43. Показов 976. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как лучше выдернуть значение из строки в котором эти значения делятся (сепаратором :: ) или может быть одно

Я намудрил так

Pascal
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
function fGetError(slanguage: string): string;
var
  iPos: integer;
  sText: string;
  blanguage, bclear: boolean;
begin
  bclear := false;
  blanguage := false;
  sText := '';
  iPos := 0;
  for iPos := 1 to Length(sError) do begin
    if bclear = false then begin
      sText := sText + sError[iPos];
    end;
    bclear := false; { если не сбросить, sText будет пустым }
    if sError[iPos] = ':' then begin
      if sText = slanguage + ':' then begin
        blanguage := true;
      end;
      if (iPos + 1 <= Length(sError)) and (sError[iPos + 1] = ':') then begin
        if blanguage = false then begin
          bclear := true;
          sText := '';
        end else begin
          sText := Copy(sText, 1, Length(sText) - 1);
          Break;
        end;
      end;
    end;
  end;
  Result := sText;
end;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.01.2018, 22:43
Ответы с готовыми решениями:

Каким может быть максимальное значение x, при котором существует хотя бы одно значение a, удовлетворяющее условиям
Коля -- очень любознательный юноша. Он решил провести исследование. Для различных действительных чисел a он решил найти такое наибольшее...

"В поле может быть введено только одно слово, пробелы могут быть или не быть с начала слова и в конце"
Добрый вечер уважаемые форумчане. Подскажите как написать выражение со след условием: -в поле может быть введено только одно слово,...

Операция не может быть завершена, поскольку эти папки или файл открыты
Здраствуйте!Прошу помощи у вас ибо сам уже закалебался мучится с этой проблемой!Как вы поняли я не могу нормально переименовывать папки или...

6
445 / 373 / 133
Регистрация: 09.09.2011
Сообщений: 1,344
23.01.2018, 00:19
каша какая-то

очевидно что часть логики за пределами функции - sError глобальная переменная?
Что в параметре slanguage ?

Ну и где пример данных и его описание?


По - теме:

a) не использовать прямую индексацию в строках, т.к. с utf-8 это не работает и все идет к тому, что даже из delphi дропнут эту возможность
2) искать подстроку '::' в строке с помощью pos (utf8pos) и радоваться жизни
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
24.01.2018, 01:04
Цитата Сообщение от Kitayets Посмотреть сообщение
a) не использовать прямую индексацию в строках, т.к. с utf-8 это не работает
Это неверное утверждение для поиска ':' в строке.

Добавлено через 1 минуту
Цитата Сообщение от Kitayets Посмотреть сообщение
2) искать подстроку '::' в строке с помощью pos (utf8pos)
Это хорошее предложение вне зависимости от (а). Возможно, PosEx().
0
2 / 2 / 0
Регистрация: 22.01.2018
Сообщений: 8
19.02.2018, 20:26  [ТС]
Почему каша? есть строка sError с разными значениями (на русском и др языках Error::Ошибка::..n) которые разделяет определенный символ например ::

Добавлено через 1 час 14 минут
Самое главное забыл разделителей может и не быть, т.е. одно значение
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
20.02.2018, 12:58
Если в качестве разделителя выбрать одиночный символ, например, #1, то можно так:
Pascal
1
2
3
uses StrUtils;
...
  s:=ExtractDelimited(msg,n,[#1]);
Добавлено через 13 минут
В остальном:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uses StrUtils;
 
function MsgByNum(const msg: String; n: Integer): String;
const Delim='::';
var b, e: Integer;
begin
  Result:='';
  b:=1;
  while n>1 do begin
    b:=PosEx(Delim,msg,b);
    if b=0 then Exit;
    Inc(b,Length(Delim));
    Dec(n);
  end;
  e:=PosEx(Delim,msg,b);
  if e=0 then e:=Length(msg)+1;
  Result:=Copy(msg,b,e-b);
end;
Добавлено через 16 минут
Если же нужно именно руками, то:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function MsgByNum(const msg: String; n: Integer): String;
const d=':'; Delim=d+d;
var b, e: Integer;
begin
  Result:='';
  e:=1;
  while n>1 do begin
    while (e<Length(msg)) and ((msg[e]<>d) or (msg[e+1]<>d)) do Inc(e);
    if e>=Length(msg) then Exit;
    Inc(e,Length(Delim));
    Dec(n);
  end;
  b:=e;
  while (e<Length(msg)) and ((msg[e]<>d) or (msg[e+1]<>d)) do Inc(e);
  if e=Length(msg) then Inc(e);
  Result:=Copy(msg,b,e-b);
end;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
20.02.2018, 13:43
Цитата Сообщение от bormant Посмотреть сообщение
Если в качестве разделителя выбрать одиночный символ, например, #1, то можно так:
А если выбрать строку и разделить вот так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
program project1;
uses SysUtils;
 
var
  s, st : string;
  arr : TStringArray;
 
begin
  readln(s);
  arr := s.Split(['::'], TStringSplitOptions.ExcludeEmpty); // <---
  for st in arr do writeln(st);
  // прекрасно работает с любой кодировкой, если что
end.
, то уже не считается? Зачем городить огороды, если в TStringHelper-е уже есть десяток перегруженных методов для разделения/объединения строк, на все случаи?
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
20.02.2018, 16:19
Цитата Сообщение от volvo Посмотреть сообщение
Зачем городить огороды, если в TStringHelper-е уже есть десяток перегруженных методов для разделения/объединения строк, на все случаи?
ТС нам не поведал, насколько вручную должен был быть осуществлен закат солнца.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2018, 16:19
Помогаю со студенческими работами здесь

Как вывести одно значение из массива list? Лучше использовать итератор или как-то по другому?
Здравствуйте! Что бы вывести одно значения из массива list нужно использовать итератор или можно как то по другому?

Что лучше? Adsence или Яндекс Дерект, а может быть
Подскажите!!!!

Name не может иметь значение NULL или быть пустым
Выводит такую ошибку, хотя удалил этот атрибут уже, но все равно выводит это сообщение, кто знает в чем может быть дело??

Тип параметра или возвращаемого значения не может быть описанием записи или описанием массива с грани
помогите исправить ошибки program DijkstraAlgorithm; uses crt; const V=6; inf=100000; type vektor=array of integer; var start:...

Тип параметра или возвращаемого значения не может быть описанием записи или описанием массива с границами
Помогите пожалуйста что за ошибка Тип параметра или возвращаемого значения не может быть описанием записи или описанием массива с...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru