现有一中英文件字符串,不度不定,中文英文字符个数不定,把这个字符串定为A。现在要把A分成每行为80个字符的形式.
请问各位老大,怎样才能避免每一行的最后一个字符不为乱码?怎样才能实现当前行的最后一个字符是半个中文件字符就在当前行显示79个字符。
请老大们帮帮忙呀,急死了!!
请写出代码~~~

解决方案 »

  1.   

    用WIDESTRING,所有的英文和中文字符一律算作双字节,比较好处理
      

  2.   

    我传入的字符变量类型就是WideString,主要就是在拆分的时候出现问题~
      

  3.   

    如果是widestring,拆分的時候不可能後面有亂碼,亂碼的原因是漢字被分割了.
      

  4.   

    同意widestring对英文,中文都使用用2个宽度来表示,不会出现乱码
      

  5.   

    上面的两位仁兄说的都没有错,用WideString都用两个字节表示中英文,主要是在拆分字符的时候才出现乱码的总理,请高手们帮帮忙呀~~
      

  6.   

    function WrapText(mText: string; mLength: Integer): string;
    var
      I, J: Integer;
    begin
      Result := '';
      while Length(mText) > mLength do
      begin
        J := Ord(ByteType(mText, mLength) = mbLeadByte);
        Result := Result + #13#10 + Copy(mText, 1, mLength - J);
        Delete(mText, 1, mLength - J);
      end;
      Result := Result + #13#10 + Copy(mText, 1, mLength);
      Delete(Result, 1, 2);
    end; { WrapText }
      

  7.   

    谢谢伴水老大,基本解决了,只是有些情况会造成死循环~~比如WrapText(A, 1)的时候就会死循环~
      

  8.   

    1、用WideString的话要注意是2的倍数;
    2、可以使用IsLeadByte函数(API)判断一个字符是不是汉字的第一个字节,笨的方法是从一行的第一个字节开始判断,如果是则应该将下一个需要判断的字节多跳一下。
      

  9.   

    WrapText(A, 1)这样调用有什么实际意义吗?一个汉字占两个字节,汉字不能拆分,每行又要求一个字节,咋搞?function WrapText(mText: string; mLength: Integer): string;
    //..
    begin
      Result := '';
      if mLength <= 1 then Exit; //容错
    //..
    end;