当前位置:主页>销售管理软件> 列表

急!分割字符串遇到的奇怪问题,头都大了 找管家婆财务软件官网

财务软件版1楼: 小弟刚学不久,遇到了很棘手的问题,用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
???
实在不会改了,大家帮帮忙

2楼: pchar转为字符用strpas否则后面会带一些你想不到的东西 如管家婆财务软件官网

3楼: 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;

4楼: procedure viver(Sender: TObject);
改成
procedure TFrmMain.viver(Sender: TObject);

5楼: procedure viver(const S:string);
参数 S 与之前定义的变量 S重名了

6楼: 接受答案了.