Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Удалить символ конца строки


Автор: EDuard 17.1.2006, 11:13
Есть ли в Дельфи функция удаления символа конца строки?
Если нет готовой то как это можно реализовать?

Например в мемо две строки

"йцуаыва мвавп м "
"вчмсимими и счми "

Как получить "йцуаыва мвавп м вчмсимими и счми "?

Автор: _hunter 17.1.2006, 11:24
проходи по тексту и удаляй все символы с кодами 10 и 13

Автор: EDuard 17.1.2006, 11:26
_hunter, можно пример?

Автор: Guedda 17.1.2006, 11:33
Код

for i := 0 to length(s) do //s = твои две строки
begin
  SetLength(u, length(s));
  c := ord(s[i]);
  if с = #10 or с = #13 then с := #0; // либо c := ord(' ');
  u[i] := chr(c);
end;

Автор: _hunter 17.1.2006, 11:34
что-то типа
int i =1;
while ( i <= str.Length() )
{
if ( str[i] == '\n' )
str.Delete(i, 1);
else
i++;
}
а лучше ( если производительность имеет значение ) писать в другую строку все символы кроме указанных

Автор: Guedda 17.1.2006, 11:35
Цитата(_hunter @ 17.1.2006, 11:34)
что-то типа
int i =1;
while ( i <= str.Length() )
{
if ( str[i] == '\n' )
str.Delete(i, 1);
else
i++;
}
а лучше ( если производительность имеет значение ) писать в другую строку все символы кроме указанных

Вообще форум Delphi, а Вы Сишные коды пишете smile

Автор: _hunter 17.1.2006, 11:37
Guedda, а разве строки не с еденицы начинаются?
Добавлено @ 11:39
это можно назвать псевдо-(делфийским)кодом
главное что смысл понятен.

Автор: Alexeis 17.1.2006, 11:40
Код

sFirst, sSecond : Ansistring;
Begin
  For i := 1 to length(sFirst)
  do
     if (sFirst[i]<>#10) and  (sFirst[i]<>#13) 
     then
       sSecond := sSecond + sFirst[i]
end;


Автор: Rennigth 17.1.2006, 11:42
smile
Guedda перевод C Builder-a -> Delphi огромная проблемма. smile

Автор: Romikgy 17.1.2006, 13:06
Код

var i: integer;
      sx: string;
begin
sx:='';
for i:=0 to Memo1.Lines.Count-1 do
sx:=sx+' ' +TrimRight(Memo1.Lines[i]);
end;

Автор: Guedda 17.1.2006, 13:29
Метод, описанный Romikgy с большими файлами может не работать. У меня, допустим, с таким методом+файлом 1,43Мб, возникла ошибка.
Так как string имеет допустимый размер (255 байт, кажется)

Автор: Romikgy 17.1.2006, 13:34
Цитата

String types
Type Maximum length Memory required Used for
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters, DBCS ANSI, MBCS ANSI, etc.
WideString ~2^30 characters 4 bytes to 2GB Unicode characters; multi-user servers and multi-language applications

string == AnsiString

Автор: Alexeis 17.1.2006, 15:14
Romikgy я посмотрел код
Код


function TrimRight(const S: string): string;
var
  I: Integer;
begin
  I := Length(S);
  while (I > 0) and (S[I] <= ' ') do Dec(I);
  Result := Copy(S, 1, I);
end;


TrimRight удаляет только пробелы справа smile
Добавлено @ 15:15
причем все

Автор: Romikgy 17.1.2006, 15:42
Да странно а так в хелпе
Код

Trims trailing spaces and control characters from a string.

Тогда так
Код

StringReplace(Memo1.Lines.Text,#13#10,' ',[rfReplaceAll]); 

или так
Код

StringReplace(Memo1.Lines.Text,#13,' ',[rfReplaceAll]); 
StringReplace(Memo1.Lines.Text,#10,' ',[rfReplaceAll]); 


Автор: Демо 17.1.2006, 15:55
Код

function DelBreakLine(const s: String): String;
var
  i,pz: Integer;
  Len: Integer;
begin
  Len := Length(s);
  SetLength(Result,Len);
  pz := 0;
  for i := 1 to Len do
  begin
    case s[i] of
       #13,#10: Continue;
    else
      begin
         Inc(pz);
         Result[pz] := s[i];
      end;
    end;
  end;
  SetLength(Result,pz);
end;

Автор: Quadr0 17.1.2006, 16:05
...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)