Текущий архив: 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