forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   убавлять сиволы (http://forum.boolean.name/showthread.php?t=7491)

temned 23.12.2008 17:42

убавлять сиволы
 
У мя есть текст, s1:=copy(vopros[m],0,dlina2/2);
Как вы видите, s=взять символы из другой строки от 0до середины, другая строка равно например vopros[m]:='Программирование на MP';
Как мне сделать так, чтобы s равнялась от начала до пробела, т.е чтоб например было не 'Программирова' , а 'Программирование' . Может как-то надо убавлять символы до тех пор , пока... Незна.ю помогите

beZ_probleM 23.12.2008 18:12

Ответ: убавлять сиволы
 
PHP код:

i:=0;    // не обизательно обнулять
Str:=''// не обезательно очищать
getChar(s,i);
i:=i+1;
while 
i<>' ' do     // пока і не равно "ПРОБЕЛ"
   
begin
      str
:=str+getChar(s,i);
      
i:=i+1;
   
end


ViNT 23.12.2008 18:23

Ответ: убавлять сиволы
 
Все гораздо проще: s:=copy(0,pos(' ',vopros[1])-1,vopros[1]). Примерно так, может где-то на один символ ошибся, т.е. надо добавить/отнять единицу.

beZ_probleM 23.12.2008 18:45

Ответ: убавлять сиволы
 
так правельнее :

Цитата:

s:=copy(vopros[1],0,pos(vopros[1],' ')-1)

temned 24.12.2008 15:29

Ответ: убавлять сиволы
 
спасибо, я почти так и думал

temned 24.12.2008 15:44

Ответ: убавлять сиволы
 
beZ_probleM, в твоем коде while i<>' ' do , но i же integer? код не работает
или подскажите как pos(vopros[m],' '); и вообще как вернуть не первое, а например третье сопадение с помощью pos??

Romanzes 24.12.2008 16:23

Ответ: убавлять сиволы
 
Вот код, который ищет 10-е появление строки fragm в строке s.
Код:

  str:=s;
  for i:=1 to 10 do
  begin
    n:=Pos(s1,fragm);
    str:=Copy(str,Pos(str,fragm)+length(fragm),length(str));
  end;


temned 24.12.2008 19:12

Ответ: убавлять сиволы
 
pos(vopros[m],' '); как вернуть не первое, а например третье сопадение с помощью pos??

ViNT 24.12.2008 19:35

Ответ: убавлять сиволы
 
Цитата:

Сообщение от TEMNED (Сообщение 92713)
pos(vopros[m],' '); как вернуть не первое, а например третье сопадение с помощью pos??

С помощью pos нельзя, если только удалять фрагмент строки до предыдущего совпадения и после этого использовать pos, а так - только перебором всей строки в цикле.

beZ_probleM 24.12.2008 20:13

Ответ: убавлять сиволы
 
Код который находит третий пробел и соответственно его номер
PHP код:

i:=0j:=0// не обизательно обнулять 
Str:='';      // не обезательно очищать 
getChar(s,i); 
i:=i+1
repeat
while i<>' ' do     // пока і не равно "ПРОБЕЛ" 
   
begin 
      str
:=str+getChar(s,i); 
      
i:=i+1
   
end;
j:=j+1;
until j=3


temned 24.12.2008 20:30

Ответ: убавлять сиволы
 
i integer, как он может быть равен <>''? Vint обьясни свои вариант на примере

beZ_probleM 24.12.2008 20:38

Ответ: убавлять сиволы
 
сорри извеняюсь) действительно ступил))) Ы
прост пишу с головы) на практике не реализовую
Цитата:

while getChar(s,i)<>' ' do

beZ_probleM 24.12.2008 20:51

Ответ: убавлять сиволы
 
вот с помощью рos

PHP код:

s2:=vopros[1];
repeat
   s
:=copy(s2,0,pos(s2,' ')-1);
   
s1:=s1+s;   // строка из слов которые находятсо до пробелов
   
s2:=copy(s2,pos(s2,' '),length(s2)-1);
i:=i+1;
until i=3//количество пробелов 


temned 04.01.2009 20:22

фигня+
 
у мя такая фигня возникла. Имеется массив из 16строк, строки загружаются из rms. делаю футбольный менеджер, и строка имеет формат: 'Робинье/10\bra', где есть имя/номер\страна.
мне надо так:
name[i]:=copy(0,затем pos, из g[i], до тех пор пока не найдет /)
но поему не полушается, в шом проблема?

Piligrim 04.01.2009 22:30

Ответ: убавлять сиволы
 
Цитата:

затем pos, из g[i], до тех пор пока не найдет /
непонятно

beZ_probleM 05.01.2009 03:05

Ответ: убавлять сиволы
 
если g[i] ето у тебя строка параметров типа етой "имя/номер\страна" то твой ответ вот :

PHP код:

k:=0;
name[i]:='';
while 
getChar(g[i],k)<>'/' do     // пока і не равно "/"  
   
begin  
      name
[i]:=name[i]+getChar(g[i],k);  
      
k:=k+1;  
   
end

или через copy :

PHP код:

k:=0;
while 
getChar(g[i],k)<>'/' do
    
k:=k+1;
name[i]:=copy(g[i],0,k-1); 


Piligrim 05.01.2009 13:42

Ответ: убавлять сиволы
 
а чем вас не устраивает тогда
PHP код:

name[i] := Copy(g[i], 0Pos(g[i], "/")); 


beZ_probleM 05.01.2009 16:24

Ответ: убавлять сиволы
 
помоему там минус единицу ещё нужно

PHP код:

name[i] := Copy(g[i], 0Pos(g[i], "/")-1); 

Для следующего слова

PHP код:

:=Copy(g[i], Pos(g[i], "/")+1Pos(g[i], "\")-1); 

и для последнего

PHP код:

:=Copy(g[i], Pos(g[i], "\")+1, length(g[i])-1); 


temned 06.01.2009 20:36

Ответ: убавлять сиволы
 
и на обед: а как потом мона будет редактировать? Это же не целая строка, а где-то середина? Например страну номер изменился?

Piligrim 06.01.2009 21:26

Ответ: убавлять сиволы
 
beZ_probleM, не внимательно читал справку. Copy и так вырезает на одну меньше :)
TEMNED, а по связнее можно? Редактировать исходную строку? Вырезаешь начало и объединяешь с новой страной.

beZ_probleM 06.01.2009 21:32

Ответ: убавлять сиволы
 
PHP код:

g[i]:=name[i]+'/'+номер+'\'+страна; 

если эти строки(g[i] - эти) нужно брать из хранилища записей и туда же их возвращать то лучше удалять ето хранилище и записывать все строки в него заново=)
удачи;)

beZ_probleM 06.01.2009 21:40

Ответ: убавлять сиволы
 
2 pilgrim
читал...
может ты нащёт pos а не copy говоришь?
потомучто copy :
Цитата:

справка:
function copy(str1: string; begin, end: integer): string;
Возвращает подстроку данной строки, начиная с позиции 'begin' и заканчивая позицией 'end'-1. Например, copy('MIDletPascal', 2, 5) возвратит 'Dle'.
а вот с роs сам не пойму шо она возращает))) -1 или простО)) от которого нужно отнимаТЬ))

Piligrim 06.01.2009 23:13

Ответ: убавлять сиволы
 
Pos возвращает позицию символа в строке. Позиция считается с нуля. А Copy вырезает по 'end-1', но тоже с нуля. И получается, что указав в Copy позицию '/' в результирующей строке мы его обрежем.
А -1 Pos возвращает если не нашла.

ViNT 06.01.2009 23:53

Ответ: убавлять сиволы
 
В подобных случаях я делаю примерно так:
создаю тип данных, в данном случае
PHP код:

type
 rec
=record
 name
:string;
 
num:integer;
 
country:string;
end

дальше создаю две функции, типа
function read(s:string):rec;
function write(r:rec):string;

функция read разбивает строку на составляющие и возвращает уже
запись, содержащую нужные поля;
функция write наоборот, формирует строку на основе записи.
Дальше все просто - читаем строку, получаем из неё данные с помощью read, изменяем или просто читаем нужные поля, снова собираем строку на основе измененной записи с помощью write и записываем в rms.


Часовой пояс GMT +4, время: 10:11.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot