Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/10: Рейтинг темы: голосов - 10, средняя оценка - 4.90
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 73
1

Как сделать строку в символ

08.03.2016, 18:14. Показов 2051. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.

Как сделать функцию правильно, чтобы любую строку переводил в символ.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function Translit(s: string): char;
var
 i: integer;
 t: string;
 
begin
 for i:=1 to Length(s) do
  begin
   case s[i] of
        '101A': t:=t+'Ч';
        '101B': t:=t+'D';
        '101C': t:=t+#13#10;
        '101D': t:=t+#9;
        '101D': t:=t+' ';
 
      else t:=t+s[i];
   end;
  end;
 Result:=t;
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2016, 18:14
Ответы с готовыми решениями:

Как преобразовать строку-символ-байт
keybd_event(ord('F'), 0, 0, 0); F - символ, ord - его численное представление Вот в чем...

Как сделать строку состояния и кнопку как в блокоте
Подскажите как сделать строку состояния как в блокноте и как сделать кнопку заменить.

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

Как сделать строку состояния
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

24
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
08.03.2016, 18:21 2
Цитата Сообщение от Nayn Посмотреть сообщение
чтобы любую строку переводил в символ.
Это невозможно ибо строка состоит из множества символов. А '101A' это не символ, а строка из 4х символов.
0
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 73
08.03.2016, 18:25  [ТС] 3
Да возможно, только не знаю как. Строку 4 символа нужно в 1 букву преобразовать.
Только надо придерживаться 4 символов, не больше и не меньше, чтобы ошибку не выдало при преобразовании.
Типа:
В Memo1 пишем - 101A
Кликаем кнопку...
В Memo2 получаем букву - Ч
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
08.03.2016, 18:31 4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var s,s1,t:string;
...........................
i:=1;
t:='';
while i<length(s)-3 do
 begin
  s1:=copy(s,1,4);
  if s1='101A' then t:=t+'×'
  else if s1='101B' then t:=t+'D'
  else if s1='101C' then t:=t+#13#10
  else if s1='101D' then t:=t+#9
  else if s1='101D' then t:=t+' '
  else t:=t+s1;
  i:=i+4;
 end;
Если четверок много, нужно создать массив из них.
1
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 73
08.03.2016, 18:45  [ТС] 5
Чет ругается программа Делфи на s
Миниатюры
Как сделать строку в символ  
0
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 73
08.03.2016, 19:05  [ТС] 6
Наверно лучше как то через массив сделать.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
08.03.2016, 19:06 7
Так нахрена s в var, если она есть параметр функции?

Добавлено через 52 секунды
И нефиг код свой фотками выкладывать, нужно текстом.
0
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 73
08.03.2016, 19:08  [ТС] 8
Я убрал s, но у меня не заработало. У вас работает?
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
08.03.2016, 19:08 9
rediclared - это повторное использование
посмотри сколько у тебя объявлено переменных s
0
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 73
08.03.2016, 19:10  [ТС] 10
Я код выложу программы, я убрал из переменных, он там лишний получается.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
08.03.2016, 19:10 11
У меня одна, но у меня нет функции, где у тебя она уже объявлена как параметр. Если бы у тебя чуть работала соображаловка и ты бы показал код текстом, я бы скопировал и показал ошибку.
0
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 73
08.03.2016, 19:17  [ТС] 12
Вот код полностью.
Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Vcl.Menus, Vcl.ComCtrls;
 
type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    RichEdit2: TRichEdit;
    procedure RichEdit1Change(Sender: TObject);
  private
  public
  end;
 
var
  Form1: TForm;
 
implementation
 
{$R *.DFM}
 
function Translit(s: string): string;
var s1,t:string;
    i: integer;
begin
i:=1;
t:='';
while i<length(s)-3 do
 begin
  s1:=copy(s,1,4);
  if s1='101A' then t:=t+'×'
  else if s1='101B' then t:=t+'D'
  else if s1='101C' then t:=t+#13#10
  else if s1='101D' then t:=t+#9
  else if s1='101D' then t:=t+' '
  else t:=t+s1;
  i:=i+4;
 end;
end;
 
procedure TForm1.RichEdit1Change(Sender: TObject);
var
 i: integer;
 
 begin
 RichEdit2.Lines.Clear;
 for i:=0 to RichEdit1.Lines.Count-1 do
  RichEdit2.Lines.Add(Translit(RichEdit1.Lines.Strings[i]));
  RichEdit2.Text := Translit(RichEdit1.Text);
end;
 
end.
Вложения
Тип файла: zip 2131.zip (859.0 Кб, 2 просмотров)
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
08.03.2016, 19:22 13
Всё что делалось в функции Translit пропадает даром, ибо никакого результата функция не возвращает.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
08.03.2016, 19:23 14
Допиши
Delphi
1
2
result:=t;
end;
1
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 73
08.03.2016, 19:29  [ТС] 15
Поправил до рабочей функции, если i=1, то со второго кода писалось, выставил значение 0 все нормально переводит!
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function Translit(s: string): string;
var s1,t:string;
    i: integer;
begin
i:=0;
t:='';
while i<length(s)-3 do
 begin
  s1:=copy(s,1,4);
  if s1='101A' then t:=t+'Г'
  else if s1='101B' then t:=t+'D'
  else if s1='101C' then t:=t+#13#10
  else if s1='101D' then t:=t+#9
  else if s1='101S' then t:=t+' '
  else t:=t+s1;
  i:=i+4;
 end;
 result:=t;
end;
Спасибо Puporev, благодарю за помощь!
0
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 73
19.04.2016, 21:39  [ТС] 16
Появилась проблема.

Когда пишешь в первом окне:
101A101B
Во втором окне дублируется
ГГ

А должно быть:
ГD
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
19.04.2016, 22:54 17
Цитата Сообщение от Nayn Посмотреть сообщение
Когда пишешь в первом окне:
101A101B
Во втором окне дублируется
ГГ
А когда в первом окне напишешь
101A101B101C101D
Во втором получишь
ГГГГ
поскольку топчешься на первых 4 символах
0
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 73
20.04.2016, 07:43  [ТС] 18
Цитата Сообщение от northener Посмотреть сообщение
А когда в первом окне напишешь
101A101B101C101D
Во втором получишь
ГГГГ
поскольку топчешься на первых 4 символах
Совершенно верно.
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
20.04.2016, 09:01 19
StringReplace?
0
12 / 11 / 7
Регистрация: 19.04.2016
Сообщений: 201
20.04.2016, 09:38 20
Возможно, как то так:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Translit(s: string): string;
const
CharArr : array of String = ['Г', 'D', #13#10, #9, ' '];
strArr : array of String = ['101A', '101B', '101C', '101D', '101S'];
 
var
s1,cs,ss:string;
i: integer;
begin
 
 for i := 0 to High(strArr) do
     s := StringReplace(s, strArr[i], CharArr[i],  [rfReplaceAll, rfIgnoreCase]);
 
 result:=s;
end;
А можно узнать, зачем это все?)

Добавлено через 2 минуты
Delphi
1
s1,cs,ss:string;
забыл убрать из вара. Уберите
0
20.04.2016, 09:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2016, 09:38
Помогаю со студенческими работами здесь

Как сделать, чтоб по клику переходил на строку с таким же значением в столбце?
Имеется процедура. procedure Searche(st:TStringgrid; ed:TEdit; k:integer); var i,TopRow:integer;...

Получить строку по указателю на первый символ
В функцию, в качестве аргумента, предаётся указатель PChar на первый байт строки. Как мне получить...

WM_COPYDATA передает только 1й символ, а не всю строку
Доброго времени суток уважаемые знатоки! Подскажите мне пожалуйста, что я делаю не так. Суть....

Разделить строку на подстроки, используя символ-разделитель
есть вот такой текст 123:456;789;321 нужно чтобы в едит1 было 123, в едит2 456, в 3 - 789, в 4 -...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru