Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Помогите решить задачку:)   Найти похожие ветки 

 
pathfinder   (2005-10-25 20:41) [0]

Суть такая:
есть файл вида
фамилия^имя^отчество^и т.д.
...
...
необходимо фамилию писать в переменную 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 пробелами, то в месте <--- возникает ошибка:(
Заранее спасибо.


 
Zeqfreed ©   (2005-10-25 20:44) [1]

pathfinder   (25.10.05 20:41)

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

Как ты узнал?


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


Zeqfreed ©


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


 
Virgo_Style ©   (2005-10-25 21:06) [3]

Имеет смысл написать функцию
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;


Не проверял.


 
YurikGL ©   (2005-10-25 21:07) [4]


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

Если файл именно такого вида, то откуда в нем переводы строки? Я это к тому, что если это именно так, что    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)
и так далее, пока строка не кончится...


 
palva ©   (2005-10-25 21:11) [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.


 
SamProf ©   (2005-10-25 21:13) [6]

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:15) [7]

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-й символ в сроку с нулевым размером!


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

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


 
GanibalLector ©   (2005-10-25 22:22) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
2-1130281304
bogdan
2005-10-26 03:01
2005.11.13
создания окон нестандартной формы, delphi


14-1129748171
iZEN
2005-10-19 22:56
2005.11.13
Опавшие листья собирать в мусорные мешки: бред или реальность?


1-1129903716
SANEK_10289
2005-10-21 18:08
2005.11.13
DDE связь...


2-1130168799
Profi
2005-10-24 19:46
2005.11.13
Зависание функции из модуля.


2-1129770852
Gale
2005-10-20 05:14
2005.11.13
Быстрая функция Pos не чувствительная к регистру ?