Сделать строку только в 1 строку - PullRequest
5 голосов
/ 12 июля 2011

У меня есть вывод, который в основном является абзацем, и когда я пытаюсь найти строку для подстроки, если эта подстрока разделена, это не работает. Как я могу превратить строку абзаца в одну строку?

Пример строки:

I have an output that is basically a paragraph and when I try 
to search the string for a substring, if that substring is split up it 
doesn't work. How can I make the paragraph string into just 1 line?

подстрока: "это не работает"

Когда я пытаюсь найти эту подстроку, она не возвращает true.

Ответы [ 3 ]

16 голосов
/ 12 июля 2011

Похоже, вы хотите трактовать переводы строк как пробелы.Написание эффективных алгоритмов поиска не тривиально, но подход, который работает и отвечает на вопрос в вашем заголовке, это

str := StringReplace(str, sLineBreak, ' ', [rfReplaceAll]);

То есть мы просто заменяем все разрывы строк пробелами.Без магических констант это

str := StringReplace(str, #13#10, #32, [rfReplaceAll]);

Возможно, между словами уже есть пробелы, кроме разрывов строк?Затем просто удалите разрывы строк, не добавляя пробелов:

str := StringReplace(str, #13#10, '', [rfReplaceAll]);
3 голосов
/ 12 июля 2011

Вы можете попробовать эту функцию:

function NoLineFeed(const s: string): string;
var i: integer;
begin
  result := s;
  for i := 1 to length(result) do
    if ord(result[i])<32 then
      result[i] := ' ';
end;

Она изменит любой управляющий символ (# 10, # 13, # 9 ...) в пробел, поэтому текст будет в одной строке,Это также будет быстрее, чем вызов StringReplace().

Редактировать:

function NoLineFeed(const s: string): string;
var i: integer;
begin
  result := s;
  for i := length(result) downto 1 do
    if ord(result[i])<32 then
      if (i>1) and (ord(result[i-1])<=32) then
        delete(result,i,1) else
        result[i] := ' ';
end;

Так что это изменит # 13 # 10 в один ''

1 голос
/ 13 июля 2011

Попробуйте что-то вроде этого:

S := 'paragraph here';
S := AdjustLineBreaks(S, tlbsLF);
S := StringReplace(S, #10, ' ', [rfReplaceAll]);
I := Pos('search string here', S);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...