안녕하세요? 또다시 질문을 하게 되네요 ^^
아래 코드는 구분자를 통해 텍스트 파일의 내용을 읽어들이는 파싱 함수입니다.
근데..텍스트 파일에 1|12|123|1234 라는 내용이 있으면..
pascount(str,'|');
passtring(str,'|',4); 즉 1234를 읽어오라고 명령어를 치면..
''값이 변수에 들어갑니다.
제가 생각하기에 마지막 부분 1234를 읽어오지 못하는 거 같습니다.
고수님들께서 조금만 도와주세요 ...
function Tform2.PasCount(const s, delimiters : string) : integer;
var
delimiter : Boolean;
count,i :integer;
begin
count := 0;
delimiter := true;
if Length(s) >0 then
begin
i := 1;
while (Pos(s[i], delimiters)<> 0) and (i <= Length(s)) do
inc(i);
for i := i to length(s) do
if Pos(s[i], delimiters)<>0 then
delimiter := true
else
begin
if delimiter = true then inc(count);
delimiter := false;
end;
end;
PasCount := count ;
end;
//구분자를 통해 데이터값을 추출
function TForm2.PasString(const s, delimiters : string;num:integer):string;
var
i,j,sLength,sStart,sEnd:integer;
begin
if pasCount(s,delimiters)>num then
begin
sStart := 1;
while (Pos(s[sStart],delimiters)<> 0 ) and (sStart <= Length(s)) do inc(sStart);
for j := 1 to num -1 do
begin
while Pos(s[sStart],delimiters)=0 do inc(sStart);
while Pos(s[sStart],delimiters)<>0 do inc(sStart);
end;
sEnd := sStart;
for i := sStart to Length(s) do
begin
if s[i] = delimiters then break;
if s[i] <> delimiters then inc(sEnd);
end;
sLength := sEnd - sStart;
PasString := Trim(copy(s,sStart,sLength));
end;
else
PasString := '';
end;
const
Delemeter = '|';
function GetParserCount(const Source: string): Integer;
var
I: Integer;
PS: string;
begin
PS := Source;
if PS[Length(Source)] <> Delemeter then
PS := PS + Delemeter;
Result := 0;
for I := 1 to Length(PS) do
if PS[I] = Delemeter then
Inc(Result);
end;
function GetParserStr(const Source: string; Index: Integer): string;
// Index는 1부터 시작한다.
var
StartPos, EndPos, CurIndex, StrPos: Integer;
PS: string;
begin
PS := Source;
if PS[Length(PS)] <> Delemeter then
PS := PS + Delemeter;
StrPos := 1;
CurIndex := 1;
// 시작위치를 구한다.
while CurIndex <> Index do
begin
if PS[StrPos] = Delemeter then
Inc(CurIndex);
Inc(StrPos);
end;
StartPos := StrPos;
//끝위 치를 구한다.
while PS[StrPos] <> Delemeter do
Inc(StrPos);
EndPos := StrPos;
Result := Copy(PS, StartPos, EndPos - StartPos);
end;
이상학 wrote:
> 안녕하세요? 또다시 질문을 하게 되네요 ^^
> 아래 코드는 구분자를 통해 텍스트 파일의 내용을 읽어들이는 파싱 함수입니다.
> 근데..텍스트 파일에 1|12|123|1234 라는 내용이 있으면..
>
> pascount(str,'|');
> passtring(str,'|',4); 즉 1234를 읽어오라고 명령어를 치면..
> ''값이 변수에 들어갑니다.
>
> 제가 생각하기에 마지막 부분 1234를 읽어오지 못하는 거 같습니다.
> 고수님들께서 조금만 도와주세요 ...
>
>
> function Tform2.PasCount(const s, delimiters : string) : integer;
> var
> delimiter : Boolean;
> count,i :integer;
> begin
> count := 0;
> delimiter := true;
> if Length(s) >0 then
> begin
> i := 1;
> while (Pos(s[i], delimiters)<> 0) and (i <= Length(s)) do
> inc(i);
> for i := i to length(s) do
> if Pos(s[i], delimiters)<>0 then
> delimiter := true
> else
> begin
> if delimiter = true then inc(count);
> delimiter := false;
> end;
> end;
> PasCount := count ;
> end;
>
>
> //구분자를 통해 데이터값을 추출
> function TForm2.PasString(const s, delimiters : string;num:integer):string;
> var
> i,j,sLength,sStart,sEnd:integer;
>
> begin
> if pasCount(s,delimiters)>num then
> begin
> sStart := 1;
> while (Pos(s[sStart],delimiters)<> 0 ) and (sStart <= Length(s)) do inc(sStart);
> for j := 1 to num -1 do
> begin
> while Pos(s[sStart],delimiters)=0 do inc(sStart);
> while Pos(s[sStart],delimiters)<>0 do inc(sStart);
> end;
> sEnd := sStart;
> for i := sStart to Length(s) do
> begin
> if s[i] = delimiters then break;
> if s[i] <> delimiters then inc(sEnd);
> end;
> sLength := sEnd - sStart;
> PasString := Trim(copy(s,sStart,sLength));
> end;
> else
> PasString := '';
> end;
>