用法str78(目标字符串),返回每78行分割的字符串function str78(Deststr : string):string;stdcall;
var
    i       : integer;
    len     : integer;
    ostr    : string;
    s       : widestring;
    c       : string;
    Turelen : integer;begin
  s := deststr;
  len:= length(s);
  Turelen :=0;
  ostr :='';  for i := 1 to len do
  begin
    c := s[i];
    if length(c) > 1 then
    begin //汉字字符
      if (((Turelen mod 78) =0) or ((Turelen mod 78) = 77)) and (Turelen <>0) then
      begin
        ostr:=ostr+#13#10;
        ostr:=ostr+'\\';
        Turelen:=Turelen+2;
      end;
      ostr := ostr + c;
      Turelen:=Turelen+2;
    end
    else
    begin //普通字符
      if ((Turelen mod 78) = 0) and (Turelen <>0) then
      begin //普通字符判断似乎没有生效
        ostr:=ostr+#13#10;
        ostr:=ostr+'\\';
        Turelen:=Turelen+2;
      end;
      ostr := ostr + c;
      Turelen:=Turelen+1;
    end;  end;
  result := ostr;
end;

解决方案 »

  1.   

    我重新修改一下:
    用法str78(目标字符串),返回每78个字符分割的字符串 function   str78(Deststr   :   string):string;stdcall; 
    var 
            i               :   integer; 
            len           :   integer; 
            ostr         :   string; 
            s               :   widestring; 
            c               :   string; 
            Turelen   :   integer; begin 
        s   :=   deststr; 
        len:=   length(s); 
        Turelen   :=0; 
        ostr   :='';     for   i   :=   1   to   len   do 
        begin 
            c   :=   s[i]; 
            if   length(c)   >   1   then 
            begin   //汉字字符 
                if   (((Turelen   mod   78)   =0)   or   ((Turelen   mod   78)   =   77))   and   (Turelen   <> 0)   then 
                begin 
                    ostr:=ostr+#13#10; 
                    ostr:=ostr+'\\'; 
                    Turelen:=2; 
                end; 
                ostr   :=   ostr   +   c; 
                Turelen:=Turelen+2; 
            end 
            else 
            begin   //普通字符 
                if   ((Turelen   mod   78)   =   0)   and   (Turelen   <> 0)   then 
                begin   //普通字符判断似乎没有生效 
                    ostr:=ostr+#13#10; 
                    ostr:=ostr+'\\'; 
                    Turelen:=2; 
                end; 
                ostr   :=   ostr   +   c; 
                Turelen:=Turelen+1; 
            end;     end; 
        result   :=   ostr; 
    end; 
      

  2.   

                    ostr:=ostr+#13#10; 
                    ostr:=ostr+'\\'; 
                    Turelen:=2; ////这里要Turelen:=0begin   //普通字符判断似乎没有生效 
                    ostr:=ostr+#13#10; 
                    ostr:=ostr+'\\'; 
                    Turelen:=2;////这里要Turelen:=0我已经调试通过了
      

  3.   

    这个'\\'是算在下一行开始的部分,所以turelen的值要计算进去。
      

  4.   

    我索性又写了一个函数...这回测试是通过的。//filter 78 换行
    function str78(Deststr : string):string;stdcall;
    var
        i       : integer;
        len     : integer;
        ostr    : string;
        s       : widestring;
        c       : string;
        Turelen : integer;
        strl    : tstringlist;
        lencur  : integer;
    begin
      {--算法
       1.判断循环体次数
       2.判断汉字
      }
      s := deststr;
      len:= length(s);
      lencur :=0;
      ostr :='';
      //此长度非彼长度
      strl := tstringlist.Create;
      strl.Clear;  for i := 1 to len do
      begin
        strl.Add(s[i]);
      end;  for i := 0 to strl.Count-1 do
      begin    c := strl.Strings[i];
        len := length(c);
        lencur := lencur+len;
        ostr := ostr + strl.Strings[i];    if ((lencur mod 77) = 0) and (lencur <> 0) then
        begin
          c := strl.Strings[i+1]; //判断下一个字符是否是汉字
          len := length(c);
          if (len > 1) then
          begin //如果是汉字,则处理,否则不处理
            ostr := ostr + #13#10 ;
            ostr := ostr +'\\';
            lencur := 2;
            //还原字符
            c := strl.Strings[i]; 
            len := length(c);
          end
        end;    if ((lencur mod 78) = 0) and (lencur <> 0) then //正常情况
        begin
          ostr := ostr + #13#10 ;
          ostr := ostr +'\\';
          lencur := 2;
        end;
      end;
      result := ostr;
    end;