оставление первого слова
Модератор: Модераторы
-
Alex_Gordon1
- новенький
- Сообщения: 18
- Зарегистрирован: 09.02.2011 19:41:12
оставление первого слова
Есть строка:
HG_ALERT1 hgrunt/alert1.wav
Необходимо удалить вспе после пробела, и оставить толкьо HG_ALERT1
Как это сделать?
HG_ALERT1 hgrunt/alert1.wav
Необходимо удалить вспе после пробела, и оставить толкьо HG_ALERT1
Как это сделать?
Код: Выделить всё
s_in='HG_ALERT1 hgrunt/alert1.wav';
s_out:=Copy(s_in,1,Pos(' ',s_in));- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Если в начале строки всегда HG_ALERT1, можно ещё проще:
Код: Выделить всё
s_in:='HG_ALERT1 hgrunt/alert1.wav';
s_out:=Copy(s_in,9,Length(s_in));-
Alex_Gordon1
- новенький
- Сообщения: 18
- Зарегистрирован: 09.02.2011 19:41:12
Да, я уже разобрался, но все равно спасибо.
Немного попридираюсь к последнему предложенному коду. Видимо, имелось в виду что-то вроде:
Это если пробел не нужен.
Или:
Код: Выделить всё
s_in:='HG_ALERT1 hgrunt/alert1.wav';
s_out:=s_in;
Delete (s_out,10,Length(s_out));Это если пробел не нужен.
Или:
Код: Выделить всё
s_in:='HG_ALERT1 hgrunt/alert1.wav';
s_out:=Copy(s_in,1,9);Тоже внесу лепту:
Не рекомендуется для реального применения!
Тем более не рекомендуется!
Код: Выделить всё
function GetFirstWorldInString(StrIn: string): string;
var
ic, l: integer;
begin
l := length(StrIn);
if l < 1 then Result := ''
else for ic := 1 to l begin
if StrIn[ic] = #20 then break
else Result += StrIn[ic];
end;
end;Не рекомендуется для реального применения!
Код: Выделить всё
function GetFirstWorldInString(StrIn: string): string;
var
p, l: integer;
begin
l := length(StrIn);
if l < 1 then Result := ''
else begin
p := pos(#20, StrIn);
if p > 1 then Result := copy(StrIn, 1, pred(p))
else if p = 1 Result := ''
else Result := StrIn;
end;
end;Тем более не рекомендуется!
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Код: Выделить всё
Function GetFirstWordInString(Const aString: String): String;
Var
aProcess: TProcess;
aStringList: TStringList;
Begin
aStringList := TStringList.Create;
aStringList.Text := aString;
aStringList.SaveToFile('1.txt');
aProcess := TProcess.Create(nil);
aProcess.CommandLine := 'cmd /C "FOR /F "tokens=1" %i IN (1.txt) DO echo %i"';
aProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
aProcess.Execute;
aStringList.LoadFromStream(aProcess.Output);
Result := aStringList[2];
aStringList.Free;
aProcess.Free;
End;
Присоединяюсь 
Код: Выделить всё
uses StrUtils;
...
s := 'HG_ALERT1 hgrunt/alert1.wav';
FirstWord := Copy2Symb(s, ' ');И я тоже:
Код: Выделить всё
function CopyL(const S: String; const Srch:String):String;
begin
Result:=Copy(s,1,Pos(Srch,S)-1);
end;
begin
s := 'HG_ALERT1 hgrunt/alert1.wav';
FirstWord := CopyL(s, ' ');
end;
Товарищи, есть функция ExtractWord
http://lazarus-ccr.sourceforge.net/docs ... tword.html
указываешь номер слова и ограничители.
http://lazarus-ccr.sourceforge.net/docs ... tword.html
указываешь номер слова и ограничители.
Модификация:
Код: Выделить всё
function GetFirstWorldInString(StrIn: string): string;
var
ic, l: integer;
gtc: DWord;
begin
l := length(StrIn);
if l < 1 then Result := ''
else for ic := 1 to l begin
gtc := gettickcount;
if StrIn[ic] = #20 then break
else Result += StrIn[ic];
if gettickcount > (gtc + 60000) then begin
showmessage('Извините, НО! Ваш ПК слишком устарел для выполнения поставленной задачи!');
Result := '';
exit;
end;
end;
end;- dunin
- энтузиаст
- Сообщения: 634
- Зарегистрирован: 02.05.2007 13:18:11
- Откуда: Тољя††и
- Контактная информация:
Ну давайте и я свою лепту внесу...
Работает. Проверено.
Код: Выделить всё
uses StrUtils...
...
procedure TMainForm.Button1Click(Sender:TObject);
const intext = 'HG_ALERT1 hgrunt/alert1.wav';
function ReturnFirstWird (FirstWord: string; DoMessage: boolean = False): string;
function CharCount(InStr: string; TheChar: Char): integer;
var I: Integer;
begin
result:= 0; i:= 0;
if Length(InStr) = 0 then exit;
repeat
if (InStr[i] = TheChar) then inc(result);
inc(i);
until (i > Length(InStr));
end;
function CopyFN(Str: string; Simvol: Char; FromSimvolNomer: integer): string;
var StartPos, EndPos: integer;
i, j: Integer;
begin
Result := '';
if (pos(Simvol, Str) = 0) then exit;
StartPos:= 0; j:= 0;
Str:= trim(Str);
if not (Str[1] = Simvol) then Str:= Simvol + Str;
if not (Str[length(Str)] = Simvol) then Str:= Str + Simvol;
for i:= 1 to Length(trim(Str))-1 do begin
if (Str[i] = Simvol) then begin
Inc(j);
if (j = FromSimvolNomer) then begin
StartPos:= i;
break;
end;
end;
end;
if (StartPos = 0) then exit;
EndPos:= PosEx(Simvol, Str, StartPos+1);
if (EndPos > StartPos)
then result := copy(Str, StartPos+1, EndPos-StartPos-1)
else result := '';
end;
begin
if (CharCount(FirstWord, #32) = 0)
then begin
if DoMessage then showmessage('Менее двух слов');
Result:= '';
Exit;
end
else begin
Result:= CopyFN(FirstWord,#32,1);
end;
end;
begin
showmessage(ReturnFirstWird(intext));
end;Работает. Проверено.
- leo_bsv
- постоялец
- Сообщения: 276
- Зарегистрирован: 04.08.2010 16:26:10
- Откуда: Йошкар-Ола
- Контактная информация:
пиппец мясо...
да если нужно оставить только HG_ALERT1 дык чё парица:
да если нужно оставить только HG_ALERT1 дык чё парица:
Код: Выделить всё
procedure ...
var s:string;
begi..
s:='HG_ALERT1'; // it's my way! =0
end;
