Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите решить задачку:) [D6, Win2k]


pathfinder ©   (2005-10-25 20:41:00) 

Суть такая:
есть файл вида
фамилия^имя^отчество^и т.д.
...
...
необходимо фамилию писать в переменную S_FAM, имя в S_NAM, отчество в S_SUR. Первое делаю так:
var
St:TStringList;
i:integer;
S, S_FAM, S_NAM, S_SUR: string;
begin
St:=TStringList.Create;
S_F:='                                                             ';
if opendialog1.Execute then St.LoadFromFile(opendialog1.FileName);
   for y:=0 to St.Count-1 do
    begin
     S:=St.Strings[y];
       for i:=1 to Pos('^', S)-1 do
        S_FAM[i]:=S[i];  <---
    end;
end;
а вот как дальше непонятно:(
и еще, если не заполнить S_FAM пробелами, то в месте <--- возникает ошибка:(
Заранее спасибо.


GanibalLector   (2005-10-25 22:22:00) [1]

А как быть Мехтиеву Мерзе Мехти Огли??? Я серьезно.


pathfinder   (2005-10-25 21:27:00) [2]

СПАСИБО ВСЕМ ОГРОМНОЕ! Вы мне очень помогли.


SamProf   (2005-10-25 21:15:00) [3]

var
St:TStringList;
S:string;
i:integer;
S, S_FAM, S_NAM, S_SUR: string;
begin
St:=TStringList.Create;
S_F:='                                                             ';
if opendialog1.Execute then St.LoadFromFile(opendialog1.FileName);
  for y:=0 to St.Count-1 do
   begin
    S:=St.Strings[y];
    s_fam:=copy(s,1,pos('^',s)-1);
    delete(s,1,pos('^',s));
    s_nam:=copy(s,1,pos('^',s)-1);
    delete(s,1,pos('^',s));
    s_sur:=copy(s,1,pos('^',s)-1);
    delete(s,1,pos('^',s));
..........................................
   end;
end;

А ошибка выскакивает, потомучто ты пишеш i-й символ в сроку с нулевым размером!


SamProf   (2005-10-25 21:13:00) [4]

var
St:TStringList;
S:string;
i:integer;
S, S_FAM, S_NAM, S_SUR: string;
begin
St:=TStringList.Create;
S_F:='                                                             ';
if opendialog1.Execute then St.LoadFromFile(opendialog1.FileName);
  for y:=0 to St.Count-1 do
   begin
    S:=St.Strings[y];
    s_fam:=copy(s,1,pos('^',s)-1);
    delete(s,1,pos('^',s));
    s_nam:=copy(s,1,pos('^',s)-1);
    delete(s,1,pos('^',s));
    s_sur:=copy(s,1,pos('^',s)-1);
    delete(s,1,pos('^',s));
..........................................
   end;
end;

А ошибка выскакивает, потомучто ты пишеш i-й символ в сроку с нулевым размером!


palva   (2005-10-25 21:11:00) [5]

{$APPTYPE CONSOLE}
uses StrUtils;
var
 S, S_FAM, S_NAM, S_SUR: string;
 pb, pe: Integer;
begin
 S := 'Пушкин^Александр^Сергеевич^';
 pb := 0;
 pe := PosEx('^', S, pb + 1);
 S_FAM := Copy(S, pb + 1, pe - pb - 1);
 pb := pe;
 pe := PosEx('^', S, pb + 1);
 S_NAM := Copy(S, pb + 1, pe - pb - 1);
 pb := pe;
 pe := PosEx('^', S, pb + 1);
 S_SUR := Copy(S, pb + 1, pe - pb - 1);
 pb := pe;
 // и т. д.
 WriteLn(S_FAM); // Пушкин
 WriteLn(S_NAM); // Александр
 WriteLn(S_SUR); // Сергеевич
end.


YurikGL   (2005-10-25 21:07:00) [6]


> есть файл вида
> фамилия^имя^отчество^и т.д.

Если файл именно такого вида, то откуда в нем переводы строки? Я это к тому, что если это именно так, что     for y:=0 to St.Count-1 doне нужно
Далее алгоритм может быть примерно такой:
k:=1
символы с k+1 по Pos('^', S)-1 из подстроки от k+1 до конца копируем в фамилию
k:=Pos('^', S)
символы с k+1 по Pos('^', S)-1 из подстроки от k+1 до конца копируем в имя
k:=Pos('^', S)символы с k+1 по Pos('^', S)-1 из подстроки от k+1 до конца копируем в отчество
k:=Pos('^', S)
и так далее, пока строка не кончится...


Virgo_Style   (2005-10-25 21:06:00) [7]

Имеет смысл написать функцию
function GetTextBeforeDelimiter(var S:String;Delimiter:String='^'):String;
var p:integer;
begin
p:=Pos(Delimiter,S);
if p=0 then p:=Length(S)+1;
Result:=Copy(S,1,p-1);
Delete(S,1,p); //немного некрасиво при p=Length(S)+1
end;


Не проверял.


pathfinder   (2005-10-25 20:52:00) [8]


Zeqfreed ©


F7..
в этом месте вылезает ошибка "EAccessViolation.."


Zeqfreed   (2005-10-25 20:44:00) [9]

pathfinder   (25.10.05 20:41)

> возникает ошибка:(

Как ты узнал?


Наверх

Титульная страница Поиск, карта сайта Написать письмо