С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330

Избавить код от меток и улучшить его

16.07.2017, 15:49. Показов 1213. Ответов 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
function TTOCSGF.repl(text:string):string;
var i,i2,li:integer;
c:integer;
inst,log:string;
label
g,s;
begin
c:=0;
li:=0;
inst:='';
s:
 for i:=0 to length(text) do begin
  if i>li then begin
   if text[i]='/' then begin
    c:=c+1;
    goto g;
   end;
   if (text[i]='"') then begin
    c:=c+1;
     for i2:=1 to c do inst:=inst+'/';
    insert(inst,text,i);
    li:=i+c;
    c:=0;
    inst:='';
    goto s;
   end;
  end;
 g:
 end;
result:=text;
end;
Код далеко не из лучших, но сделал что смог. Не так давно понял, что многим не нравятся метки, да и в общем, код не очень-то. Нужно усовершенствовать код или хотя бы избавить его от меток. Суть кода - удвоить количество слэшей перед кавычкой и добавить ещё один ( " -> \" ; \\" ->\\\\\" ).
Кликните здесь для просмотра всего текста
Кто когда-нибудь разбирался в командах майна от версии 1.8 поймёт для чего это.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.07.2017, 15:49
Ответы с готовыми решениями:

Как улучшить свой код и его структуру?
Изучил основы С++, сейчас активно изучаю SFML, Qt и глядя на код других людей я замечаю что мой код заведомо отличается, (хотя по сути то...

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

Плохой калькулятор: как его сделать нормальным? (улучшить код)
Как его сделать нормальным ? :cry: #include <functional> #include <iostream> #include <sstream> #include <string> ...

12
Айлурофил
 Аватар для Massaraksh7
510 / 442 / 111
Регистрация: 27.05.2017
Сообщений: 2,657
Записей в блоге: 5
16.07.2017, 16:29
Не особенно вникая в содержание, но с сохранением функциональности:
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
function TTOCSGF.repl(text:string):string;
var i,i2,li:integer;
c:integer;
text,inst,log:string;
b:Boolean;
begin
text:='"';c:=0;
li:=0;inst:='';
repeat
   begin
   b:=True;
   for i:=0 to length(text) do
      begin
      if i>li then
         begin
         if text[i]='/' then begin c:=c+1;continue; end;
         if text[i]='"' then
            begin
            c:=c+1;
            for i2:=1 to c do inst:=inst+'/';
            insert(inst,text,i);
            li:=i+c;c:=0;inst:='';b:=False;
            break;
            end;
         end;
      end;
   end;
until (b);
result:=text;
end;
1
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
16.07.2017, 18:23  [ТС]
Маленький вопрос не полностью по теме:
Java
1
2
3
4
5
6
    public static String convert( String text) {                
        String textr = """ + text.replace("\\", "\\\\").replace("\"", "\\\"") + "\"";
        textr = textr.substring(0, textr.length()-1);
        textr = textr.substring(1);
        return textr;   
    }
Я конечно всё понимаю, но этот код делает тоже самое, что так гигантская хрень, которую я пытался написать около часа!
Код я взял из одной программки (jd-gui)
Так как в джава я 0+ я не понял, как убрать скобки по краям и немного добавил своего кода, но это не важно. Если кто-нибудь разбирается в джаве, то переведите это на паскаль плиз, а точнее только вторую строку.

Добавлено через 1 час 38 минут
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Не особенно вникая в содержание, но с сохранением функциональности
Ваш код не работает
0
Айлурофил
 Аватар для Massaraksh7
510 / 442 / 111
Регистрация: 27.05.2017
Сообщений: 2,657
Записей в блоге: 5
16.07.2017, 18:29
А у меня работает:
Миниатюры
Избавить код от меток и улучшить его   Избавить код от меток и улучшить его  
0
Айлурофил
 Аватар для Massaraksh7
510 / 442 / 111
Регистрация: 27.05.2017
Сообщений: 2,657
Записей в блоге: 5
16.07.2017, 18:35
И да, если Вы этот код писали сами, Вы легко найдете, почему он у Вас не работает.
0
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
16.07.2017, 19:00  [ТС]
Не заметил text:='"';c:=0;
Спасибо.

Добавлено через 8 минут
Может переделаете это код на паскаль?
Java
1
2
3
4
5
6
    public static String convert( String text) {                
        String textr = "/"" + text.replace("//", "////").replace("/"", "///"") + "/"";
        textr = textr.substring(0, textr.length()-1);
        textr = textr.substring(1);
        return textr;   
    }
Он вроде как по-компактней.

Добавлено через 58 секунд
Кстати, вместо обычных слэшей должны быть обратные, просто сайт их постоянно удаляет
0
Айлурофил
 Аватар для Massaraksh7
510 / 442 / 111
Регистрация: 27.05.2017
Сообщений: 2,657
Записей в блоге: 5
16.07.2017, 19:15
Не, я с явой не работал.
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
16.07.2017, 20:39
Лучший ответ Сообщение было отмечено Zagadohnik37 как решение

Решение

Цитата Сообщение от Zagadohnik37 Посмотреть сообщение
Суть кода - удвоить количество слэшей перед кавычкой и добавить ещё один ( " -> " ; " ->\\\" ).
эммм... А по-человечески?
В си-подобных языках просто символы так экранируются. Вы уверены что вам надо что-то удваивать вообще?

Добавлено через 1 час 6 минут

Не по теме:

Сперва смотрю - это Java. Погуглил метод replace, уточнить как точно работает. И тогда подумал - а может это не Java, а JavaScript какой? Ибо всюду выдавалось мол метод заменяет только "символ на символ". Но оформление метода совсем не JS'овское же...

Еле нашёл нормальное описание метода - там блин не "символ", а "последовательность символов", какого хрена во всех туториалах неверная инфа...
То есть это можно полагать обычный StringReplace() с параметром rfReplaceAll.



А вот что за идиотизм с прибавкой символов и подстроками - это ваще непонятно. Ладно бы оно сначала прибавлялось, а потом замена и вырезание подстроки... Но там же... В холостую же работает.

Пробуйте сперва такое:
Delphi
1
2
3
4
function convert(const Text: String): String;
begin
Result:=StringReplace(StringReplace(Text, '/', '//', [rfReplaceAll]), '"', '/"', [rfReplaceAll]);
end;
1
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
16.07.2017, 21:52  [ТС]
Цитата Сообщение от GoodWeather Посмотреть сообщение
Пробуйте сперва такое:
function convert(const Text: String): String;
begin
Result:=StringReplace(StringReplace(Text , '/', '//', [rfReplaceAll]), '"', '/"', [rfReplaceAll]);
end;
Я Как-то даже и не думал, что через replace это можно сделать...
Кстати, я не знал, что для вставки кавычки внутри кавычек в джава используется обратный слэш, и тогда код просто наипростейший:
Java
1
String textr = text.replace("\\", "\\\\").replace("\"", "\\\"");
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
17.07.2017, 00:08
\ - это экранирование. В Делфи такой хрени нету. Оно идёт от Си. Во всём Си-подобном такое - в Плюсах, в JS, в Java, в C#...
Это нужно чтоб писать спец-символы. Типа \n или \t или \0.
Если в строке встречается \ - то это не символ \, а указание что дальше идёт некий спец-символ.
Но тогда как же написать \ если мы имеем ввиду не какую-то хрень, а именно символ \? А тогда его надо два раза написать. \\ обозначает символ \.
А двойная кавычка используется как границы строки, как у Делфи одинарная кавычка. И чтоб компилятор не решил что строка кончилась надо написать ", это обозначает просто символ ".

А Java-код да, тупой. Аж пять лишних действий.

Добавлено через 3 минуты
Java
1
2
3
    public static String convert (String text) {                
        return text.replace("\\", "\\\\").replace("\"", "\\\"");
    }
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
17.07.2017, 01:08
Цитата Сообщение от BOGG ART Посмотреть сообщение
В Делфи такой хрени нету
Такая или подобная тоже есть разумеется. Например кавычка внутри текстовой константы.
0
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
17.07.2017, 17:45  [ТС]
А как в дэлфи тогда вставить одинарную кавычку?
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
17.07.2017, 21:01
В Делфи (а так же в T-SQL) текст обрамляется одинарной кавычкой: '.
Когда в самом тексте требуется "символ одинарная кавычка" - то по лёгкой мини-аналогии его просто удваивают:
Delphi
1
2
3
4
5
Var Comment: String;
Begin
Comment:='I Don''t Smoke';
ShowMessage(Comment);
End;
T-SQL
1
SELECT * FROM comments WHERE comment LIKE 'I Don''t Smoke';
Добавлено через 5 минут
А ещё некоторые "отображатели текста" (во всяком случае в Windows) используют символ & для добавки подчёркивания последующего символа (яркий пример - иллюстрация "горячих клавиш"). И для отмены эффекта символ также удваивают:
Delphi
1
2
3
4
5
6
Var Comment: String;
Begin
Comment:='I Don''t &Smoke && I Don''t Drink Alcohol.';
Memo1.Lines.Add(Comment);
ShowMessage(Comment);
End;
Из примера видно, что & влияет исключительно на отображение, но не на содержимое строки.

Добавлено через 6 минут

Не по теме:

А в Лазарусе данное подчёркивание не работает, гм...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.07.2017, 21:01
Помогаю со студенческими работами здесь

улучшить код
добрый день. Начал недавно изучать angularjs, попросил людей скинуть задачки, чтобы потренироваться. Скинуть - скинули, но вот пропали...

Улучшить код
Написал код, хотелось бы узнать, как можно его улучшить. Буду благодарен если поможете, заранее спасибо! Код: Engine = 0 ...

улучшить код
<?php $sql="SELECT * FROM forma"; // Обеспечим выполнение запроса и получение объекта recordset $result=mysql_query($sql) or...

Как улучшить код?
код новичка, подскажите как улучшить исправив ошибки <?php session_start(); $_SESSION = "Ваша запись успешна"; ...

Как улучшить код
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru