Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
5 / 5 / 2
Регистрация: 25.10.2015
Сообщений: 236

StringReplace

30.05.2016, 09:34. Показов 2822. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите

у меня есть строка

Delphi
1
StringReplace(ExtractFileName(CurrentFile),'й','и', [ rfReplaceAll, rfIgnoreCase ]);
она меняет "привей", на "привеи"

а так же есть

Delphi
1
StringReplace(ExtractFileName(CurrentFile),'Й','И', [ rfReplaceAll, rfIgnoreCase ]);
но она меняет "ПРИВЕЙ", на "ПРИВЕИ?"

как сделать что бы не появлялся знак "?" ???
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.05.2016, 09:34
Ответы с готовыми решениями:

StringReplace
var s: string; begin S:= form1.Edit3.Text; S:= StringReplace(S, '- ', '-', ); Идея такова, мне необходимо все "дефис...

Замена текста. Нужен рабочий пример с stringreplace
stringreplace -киньте синтаксис на русском Добавлено через 30 минут inputstr:=stringreplace(inputstr,'.',',',); inputstr = 5,5 не...

Delph/CodeGear/StringReplace замена &_#039; на символ '
в строке memo1 имеется код символа ', т.е. &_#039; заменяю StringReplace'ом, но ничего не происходит, тот же код остается, что делать? ...

18
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
30.05.2016, 09:48
В первом случае меняется любая из "Й" или "й" на мелкую "и".
Во втором случае меняется любая из "Й" или "й" на большую "И".
Какие ещё "?" где? гм... Версия Делфи?

Добавлено через 50 секунд
Весь код давайте. Откуда берёте CurrentFile, какого он типа, куда отправляется результат StringReplace...
1
5 / 5 / 2
Регистрация: 25.10.2015
Сообщений: 236
30.05.2016, 10:04  [ТС]
BOGG ART,

Delphi
1
2
3
CurrentFile := AnsiLowerCase(OpenDialog.FileName);
 
sFileName.Text := StringReplace(ExtractFileName(CurrentFile),'Й','И', [ rfReplaceAll, rfIgnoreCase ]);
Добавлено через 12 минут
BOGG ART,

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
  with Gate do
  if (FMode = 0) then
    OpenRunnerFile2(ID, CurrentFile)
  else begin
   idpath:=4;
    Path := GetContractBaseFilePath(idpath);
    try
    OpenDialog.InitialDir := Path;
    OpenDialog.FileName := '';
    if OpenDialog.Execute then
    begin
      if (AnsiPos(LowerCase(Path), LowerCase(OpenDialog.FileName)) = 0) then
      begin
        MessageDlg('Äîêóìåíò äîëæåí íàõîäèòüñÿ â áàçå äîãîâîðîâ. Âûáðàí ôàéë: '+OpenDialog.FileName, mtWarning, [mbOk], 0);
        GetFile;
      end else
      begin
         FChangeFile := 1;
        CurrentFile := AnsiLowerCase(OpenDialog.FileName);
        PathIndex := Pos(Path, OpenDialog.FileName) + Length(Path);
        BaseFile := Copy(OpenDialog.FileName, PathIndex, Length(OpenDialog.FileName) - PathIndex + 1);
        //sFileName.Text := ExtractFileName(CurrentFile);
        sFileName.Text := StringReplace(ExtractFileName(CurrentFile),'й','и', [ rfReplaceAll, rfIgnoreCase ]);
        //sFileName.Text := StringReplace(ExtractFileName(CurrentFile),'Й','Й', [ rfReplaceAll ]);
        //sFileName.Text := StringReplace(sFileName.Text,'й','й', [ rfReplaceAll ]);
        FChangeFile:=1;
      end;
    end;
    except
      on E : Exception do
      MessageDlg('Îøèáêà :'+ e.Message,mtError,[mbOK],0);
    end;
  end;
0
5 / 5 / 2
Регистрация: 25.10.2015
Сообщений: 236
30.05.2016, 10:15  [ТС]
BOGG ART,
Миниатюры
StringReplace  
Изображения
 
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
30.05.2016, 10:43
Ага, так, так...
Версию Делфи вы не написали. Это важно.

Добавлено через 5 минут
Странные кроказябры вылезли... Никогда таких не видел... Даже Декодер не понял что это...
1
5 / 5 / 2
Регистрация: 25.10.2015
Сообщений: 236
30.05.2016, 10:51  [ТС]
BOGG ART, Delphi 7
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
30.05.2016, 11:06
С кодировкой явно что-то не так... Может проект был создан в другой версии, а вы перенесли модули в седьмую?

А знак вопроса ещё может быть если в имени файла был Юникод...
1
5 / 5 / 2
Регистрация: 25.10.2015
Сообщений: 236
30.05.2016, 11:19  [ТС]
BOGG ART, Нет, проект был создан на Delphi 7

Насчет в файла, там тоже как видите нету Юникода
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
30.05.2016, 11:41
Бывают невидимые символы. Даже в ANSI вроде есть, а в Юникоде их просто навалом. Думаю как бы вам проверить-то это попроще...
Delphi
1
2
3
4
5
      if OpenDialog.Execute then
            begin
            CurrentFile:=OpenDialog.FileName;
            If FileExists(CurrentFile) Then
                  ShowMessage('Файл существует: '+CurrentFile);
Так будут вопросики? Если да - то в имени файла Юникод сидит...

Добавлено через 5 минут
Это для старых версий не поддерживающих Юникод. Новые будут показывать как в проводнике.
1
5 / 5 / 2
Регистрация: 25.10.2015
Сообщений: 236
30.05.2016, 11:45  [ТС]
BOGG ART,

Да есть.
Изображения
 
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
30.05.2016, 11:48
Для Делфи7 придётся писать что-то обходное, что-то с этим делать, такие символы вам вряд ли же нужны? Ну может как-то так:
Delphi
1
2
3
// после OpenDialog.Execute
            CurrentFile_Orig:=AnsiLowerCase(OpenDialog.FileName);
            CurrentFile_ANSI:=StringReplace(CurrentFile_Orig, '?', '', [rfReplaceAll]);
И использовать только эти две переменные. Для функций типа FileExists использовать оригинал, для остального работать с анси...
1
5 / 5 / 2
Регистрация: 25.10.2015
Сообщений: 236
30.05.2016, 11:49  [ТС]
BOGG ART, а как нибудь можно учитывать это и что бы не было "?" ?
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
30.05.2016, 11:50
Лучший ответ Сообщение было отмечено Пабл0 как решение

Решение

В путях не может быть "?", поэтому думаю сойдёт просто принудительное их "убирание".
1
5 / 5 / 2
Регистрация: 25.10.2015
Сообщений: 236
30.05.2016, 12:05  [ТС]
BOGG ART, спасибо больше, помогло.
0
30.05.2016, 12:15

Не по теме:

Делфи7 - она да, прям как родная, самая приятная по восприятию, и не я один так считаю.
Но всё же стоит пробовать более современные версии и изучать что там появилось/изменилось.
Сейчас можно с офф-сайта скачать триалку самой новой версии, на 30 дней.

0
5 / 5 / 2
Регистрация: 25.10.2015
Сообщений: 236
30.05.2016, 15:49  [ТС]
BOGG ART, Подскажите код который бы изменял у файла самого "й" на "и"

Добавлено через 1 час 50 минут
BOGG ART,

Delphi
1
2
3
4
5
6
7
8
FChangeFile := 1;
        CurrentFile_Orig := AnsiLowerCase(OpenDialog.FileName);
        CurrentFile := StringReplace(CurrentFile_Orig, '?', '', [rfReplaceAll]);
 
        PathIndex := Pos(Path, OpenDialog.FileName) + Length(Path);
        BaseFile := Copy(OpenDialog.FileName, PathIndex, Length(OpenDialog.FileName) - PathIndex + 1);
        sFileName.Text := StringReplace(ExtractFileName(CurrentFile),'й','и', [rfReplaceAll]);
        RenameFile(CurrentFile, sFileName.Text);
Маленькие изменяет, а большие нет
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
30.05.2016, 15:56
Что такое "у самого файла"? Переименовать? Ну вот же вроде должно работать у вас.

rfReplaceAll - заменить все вхождения.
rfIgnoreCase - не зависимо от регистра.
0
5 / 5 / 2
Регистрация: 25.10.2015
Сообщений: 236
30.05.2016, 16:12  [ТС]
BOGG ART, ну у имени файла "Привей.dox" меняет все хорошо, а у "ПРИВЕЙ.dox" не меняет...
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
30.05.2016, 16:13
Цитата Сообщение от BOGG ART Посмотреть сообщение
rfIgnoreCase - не зависимо от регистра.
У вас его нету. Добавьте. С:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2016, 16:13
Помогаю со студенческими работами здесь

StringReplace
CellText := StringReplace(CellText, #0$D,'', ); ошибка Missing operator or semicolon в чем проблема?

StringReplace
AnsiString shost=StringReplace("svr::c11", "::c11", "", TReplaceFlags()<< rfReplaceAll << rfIgnoreCase); в результате должно быть svr а...

StringReplace
AssignFile(F, '1.txt'); Reset(F); while not Eof(F) do begin readln(f, tmp); name:=tmp;

Stringreplace
Добрый вечер, помогите, что я делаю не так : var total:string; begin total:=' lolka '; srichedit1.Text :=...

StringReplace не подходит
Всем привет! Есть два файла следующего вида: 1:Позицияодин 2:Позициядва 3 3:Позициятри и Категория1: 1,2,3 Категория 2:2,3 ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru