急!分割字符串遇到的奇怪问题,头都大了(70分)

  • 主题发起人 主题发起人 蚂蚁根
  • 开始时间 开始时间

蚂蚁根

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟刚学不久,遇到了很棘手的问题,用SPCOMM做串口监控,分解接收数据保存到字符串数组里,有几个错误一直困扰我,请大家帮帮忙
声明部分
private
{ Private declarations }

procedure viver(const S:string)
//procedure viver(Sender: TObject);
var
S:STRING;
procedure TFrmMain.Comm1ReceiveData(Sender: TObject
Buffer: Pointer
//接受下位机数据
BufferLength: Word);
//var
//pStr:PChar;
begin
if cbrevhex.Checked then
begin
pStr:= Buffer;
memo1.text:=memo1.Text+StrToHexStr(pStr);
end;
pStr:= Buffer;
s:= pstr;//这里把pstr转成s:string型,供procedure viver()调用
memo1.text:=memo1.Text+(pstr);
end;


procedure viver(const S:string);//procedure viver(Sender: TObject);
var
sp,i,j: integer;
strarr: array[1..8]of string;

begin
j:=1;
sp := pos('',s);
s := COPY(s,(sp+1),length(s)-sp);
repeat
for i=1 to length(s) do//这里说我不能用全局变量s来循环,请问我该怎么做把其他过程的值调用过来?
begin
if copy(s,i,1)<>'' then
begin
s := copy(s,i,length(s)-i);
continue;
end;
end;
sp:= pos('',s);
if i>8 then
s := ''
else
begin
strarr[j] := copy(s,1,sp-1);
inc(j);
s := copy(s,sp+1,length(s)-sp);
end;
until length(s)=0;
end;
错误:
[Error] Unit1.pas(287): Left side cannot be assigned to
[Error] Unit1.pas(293): Left side cannot be assigned to
[Error] Unit1.pas(299): Left side cannot be assigned to
[Error] Unit1.pas(304): Left side cannot be assigned to

另外还有一个困惑的问题:
当写成procedure viver(Sender: TObject);时
错误为:
[Hint] Unit1.pas(79): Private symbol 'viver' declared but never used
[Error] Unit1.pas(79): Unsatisfied forward or external declaration: 'TFrmMain.viver'
请问到底哪种声明是正确的???

for i=1 to length(s) do//这里说我不能用全局变量s来循环,请问我该怎么做把其他过程的值调用过来?
s:=string;声明成了全局变量
pchar是串口接受的数据,转换成s:string 这样不行吗?
为什么会报错Left side cannot be assigned to
???
实在不会改了,大家帮帮忙
 
pchar转为字符用strpas否则后面会带一些你想不到的东西
 
procedure TFrmMain.Comm1ReceiveData(Sender: TObject
Buffer: Pointer
//接受下位机数据
BufferLength: Word);
var
sBuffer: string;
begin
SetLength(sBuffer, BufferLength);
Move(Buffer, sBuffer[1], BufferLength);
if cbrevhex.Checked then
begin
memo1.text := memo1.Text + StrToHexStr(sBuffer);
end;
S := sBuffer;
memo1.text := memo1.Text+(sBuffer);
end;
 
procedure viver(Sender: TObject)

改成
procedure TFrmMain.viver(Sender: TObject);
 
procedure viver(const S:string);
参数 S 与之前定义的变量 S重名了
 
接受答案了.
 
后退
顶部