对一个MEMO中的字段处理 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061224223945142.html
有一个memo里内容如下:1,2,8,2,6,3,3,2,8,2,5,2,10,4,1,1,3,4,2,3,2,9,2,1,8,1,2,4,4,11,1,7  
  ,6,5,6,1,1,1,2,2,6,4,2,1,6,1,5,6,2,1,1,2,4,4,2,3,2,6,1,3,2,8,1,1,4  
  ,3,4,8,3,6,2,1,  
   
  现在想达到以下目的:  
  1、统计其中所出现的数字以及数字出现的次数;  
  2、相同数字连出的次数;比如上面的1:  
  1,2,1,1,1,3,1,1,2,1,2,1类似这样的;  
  该如何处理,高手求救!!!

1、统计其中所出现的数字以及数字出现的次数  
   
          //ButtonSum:   TButton;     统计  
          //MemoSrc:   TMemo;             源Memo  
          //MemoSum:   TMemo;             显示统计信息用  
   
  procedure   TForm1.ButtonSumClick(Sender:   TObject);  
  var  
        Str   ,   S   :   String;  
        SList       :   TStringList;  
        I   ,   Sum   :   integer;  
  begin  
        Str       :=   MemoSrc.Text;  
        SList   :=   TStringList.Create;  
        SList.Text   :=   StringReplace(   Str,   ','   ,   #10   ,   [rfReplaceAll]   );  
        SList.Sort;  
        S       :=   SList[0];  
        Sum   :=   1;  
        for   I   :=   1   to   SList.Count-1   do  
                if   S   <>   SList[I]   then  
                      begin  
                      memoSum.Lines.Add(S   +   '     :     '   +   IntToStr(Sum)   +'   个');  
                      S   :=   SList[I];  
                      Sum   :=1;  
                      end   else   Inc(Sum);  
        SList.Free;  
  end;  
   
  2、相同数字连出的次数  
         
        没弄明白。

不好意思,上面的代码里,在   SList.Free;   这句前面,还要加一句:  
  memoSum.Lines.Add(S   +   '     :     '   +   IntToStr(Sum)   +'   个');

谢谢帅哥的支持,第二个问题的意思是这样的,在整个数字中有许多个1,2,3等,那么这些相同数字有时是连着出的,像1,1这样,现在就统计这些数字连出的次数,要是没有连,就是1,要是连了,连几次就是几次:1,2,8,2,6,3,3,2,8,2,5,2,10,4,1,1,3,4,2,3,2,9,2,1,8,1,2,4,4,11,1,7  
  ,6,5,6,1,1,1,2,2,6,4,2,1,6,1,5,6,2,1,1,2,4,4,2,3,2,6,1,3,2,8,1,1,4  
  ,3,4,8,3,6,2,1,  
      上面的1:第一次的1,是1,2,8..没有连,第二次和第三次出现的1就连了,4,1,1,3,第四次和第五、六次都没连,后面又连了3次,1,1,1,。所以这几次统计结果就是:1,2,1,1,1,3...如此类推

我们在刚学C语言的时候就经常做这样的算法,很简单  
  1、统计其中所出现的数字以及数字出现的次数;  
  定义一个2维integer动态数组,   其数组的长度为这串数字的最大值。  
  setlength(intArr,MaxValue);     这里好像是11,  
  所以就是   intarr[11,2],初始化所有的数组为一个默认值,这个默认值必须是memo中没有的数字!我们姑且初始化为0,1列可以不是,2列必须为0,这是用来计算个数的  
  然后遍历这些数字,  
  遍历之前对memo里的数字进行格式化,  
  加入另一个memo   或者定义一个Tstrings类型的变量  
  S:=TStrings.Create;  
  S.Delimiter:=',';  
  S.DelimitedText:=Memo.text;  
   
  ....  
   
  S.Free;   //最后执行  
   
  For   I:=1   to   S.count-2   do     //减2是应为最后一个字符是,所以格式化之后最后一个元素是空!  
  begin  
      intArr[Strtoint(S.strings[I]),0]:=S.strings[I])  
      intArr[Strtoint(S.strings[I]),1]:=intArr[Strtoint(S.strings[I]),1]+1;  
  end;

2、相同数字连出的次数  
  这个统计则是另外的算法了,  
  对memo里的字符进行格式化,还是必须的    
  加入另一个memo   或者定义一个TstringList类型的变量  
  S:=TStringList.Create;  
  S.Delimiter:=',';  
  S.DelimitedText:=Memo.text;  
  S.short;//对其排序    
    定义一个数组保存统计结果:intArr[X,2],   数组的行数为元素的个数,也就是S的Count-2,最终是用不到这么多的,列分为2列,   1列保存元素,2列保存出现次数    
    定义一个字符串变量   Str:='';   //中转字符,用来查看相邻元素之间是否相同  
    定义一个integer变量   index:=0;   //用来标示统计到哪个元素的下标!  
  For   I:=0   to   S.Count-2   do  
  begin  
        if   Str=S.Strings[I]   then  
        begin  
            intArr[Index,1]:=intArr[Index,1]+1;  
        end  
        else     begin  
                          index:=index+1;  
                          Str:=S.strings[I];  
                          intArr[Index,0]:=StrToInt(S.Strings[I]);    
                          intArr[Index,1]:=0;    
                    end;    
  end;  
  S.Free;

不好意思,第2个问题,不需要排序!

谢谢二位,我觉得lihuasoft(学习低调做人)   的方法比较好,简单一些,winxkm(蹩脚的程序员)的方法用到动态二维数组,比较麻烦,第二个问题我自己解决了,谢谢二位!!

转载于:https://www.cnblogs.com/delphi2007/archive/2008/09/16/1291746.html

对一个MEMO中的字段处理相关推荐

  1. 如何更新mysql数据库字段_如何使用MySQL一个表中的字段更新另一个表中字段

    1,修改1列 update student s, city c set s.city_name = c.name where s.city_code = c.code; 2,修改多个列 update ...

  2. SQL多表查询和查询一个表中某字段值相同的数据

    如何多表查询,比如A表(student)中有一个字段teacher_id,跟B表(teacher)中的id是相同的. 如果我想查询某个student的teacher,并且要求查询出来的结果包含stud ...

  3. 一个表中的字段值用作另一个表的In查询条件

    Question表与Paper表 Paper表中字段QuestionIds存储的是Question表中字段Id的拼接后的值 如: 'f855eba1-b308-4bd7-a250-c071a0e1bd ...

  4. SQL查询一个表中类别字段中Max()最大值对应的记录

    问题是: 数据库有一个表 code,里面有个点击量字段click_num和一个类别字段kind以及其它信息字段, 现在要搜出每个类别中点击量最大的那条记录,如果是10个类别,那么结果应该是10条记录, ...

  5. SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称

    1.查询数据库中的所有数据库名: 1 SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查询某个数据库中所有的表名: 1 SELECT Nam ...

  6. linux查找一个文件中abc字段命令,Linux查询命令整理(示例代码)

    在linux中,查找命令主要有find和grep,以及mlocate/locate 区别: (1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间 ...

  7. 查询一个表中某个字段最大值的集合

    1.使用场景 需要找到最新版本的Resume信息,根据主键 2.所有信息在同一个表中查询出,创建子查询 <!-- 查询一组最新版本的简历信息 --><select id=" ...

  8. mysql把一个字段加到另一张表中_mysql如何能把一个表中的某一字段下的数据加入另一个表中相同字段下,条件是两表中的某字段相同?...

    1.创建表 create table a (name varchar(20) not null,sex varchar(10)); create table b (name varchar(20) n ...

  9. 怎么获取一个类型的所有字段的名字 和获取给予数据相应的值

    下面的代码你只要注意  怎么样获取字段名和相应数据的值就OK了其它的就不要管 View Code public FlexiGridData GetFlexiGridData<T>(Page ...

最新文章

  1. 单向链表JAVA代码
  2. 从神经元到神经网络、从神经网络到深度学习:神经网络、深度学习、神经元、神经元模型、感知机、感知机困境、深度网络
  3. 「 每日一练,快乐水题 」599. 两个列表的最小索引总和
  4. 递归回溯最简单易懂的小例子
  5. 蓝桥练习-算法训练 Collecting Luggage
  6. 企业的最佳选择?开放式混合云大行其道
  7. 【华为云实战开发】12.如何在云端快速开展Swagger接口测试
  8. 《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》
  9. linux系统进入救援模式
  10. 四核八线程和八核八线程区别
  11. 2020计算机考试系统office,2020年3月计算机二级考试,大学生office考试教材,仿真考试系统...
  12. 将ppt的图保存成矢量图
  13. 基于腾讯地图实现精准定位,实现微信小程序考勤打卡功能
  14. 【QT】FillRect填充的区域实现部分区域透明
  15. ​关于百度网盘扩容的一点经验分享2022
  16. linux如何进入文件编辑,Linux 文件编辑工具
  17. [WTL/ATL]_[Gdiplus]_[绘制虚线并设置破折号空格的宽度]
  18. nacos启动报错 Unable to start embedded Tomcat 以及项目链接nacos报错 server is DOWN now, please try again later!
  19. 2020年美容师(中级)报名考试及美容师(中级)考试总结
  20. 训练集、验证集、测试集以及交叉验证

热门文章

  1. php计算器_,php计算器
  2. 落实“新基建”部署,坚持服务为本,推动新能源汽车充电桩建设
  3. 可以自由定制的游戏手柄,让操作更顺手,北通阿修罗3S上手
  4. LR(1)文法智能分析
  5. 计算机test的应用,memtest怎么用,教您如何使用MemTest检测内存
  6. Unity 3D 新手强烈推荐教程
  7. 将txt_path下的指定文件夹中的图片合在一起
  8. mongodb java 子查询_MongoDB 怎么计算子查询
  9. 【MySQL高级】MySQL 传输数据过大 max_allowed_packet 参数的设置
  10. mapboxGL之风流图