Char在C#中表示一个Unicode字符,正是这些Unicode字符构成了字符串。Unicode字符是目前计算机通用的字符编码,它可满足跨语言、跨平台的文本转换、处理的要求。
它的定义非常简单:
char ch1=’L’;1.2 Char类的使用
方 法
说 明
IsControl
指示指定的unicode字符是否属于控制字符类别
IsDigit
指示某个unicode字符是否属于十进制数字类别
IsHighSurrogate
指示指定的char对象是否为高代理项
IsLetter
指示某个unicode字符是否属于字母类别
IsLetterOrDigit
指示某个unicode字符是否属于字母类别还是属于十进制数字类别
IsLower
指示某个unicode字符是否属于小写字母类别
IsLowerSurrogate
指示指定的char对象是否为低代理项
IsNumber
指示某个unicode字符是否属于数字类别
IsPunctuation
指示某个unicode字符是否属于标点符号类别
IsSeparator
指示某个unicode字符是否属于分割符类别
IsSurrogate
指示某个unicode字符是否属于代理项字符类别
IsSurrogatePair
指示两个制定的char对象是否形成代理项对
IsSymbol
指示某个unicode字符是否属于符号字符类别
IsUpper
指示某个unicode字符是否属于大写字母类别
IsWhiteSpace
指示某个unicode字符是否属于空白类别
Parse
将指定字符串的值转换为他的等效的unicode字符
ToLower
将unicode字符的值转换为它的小写等效项
ToLowerInvariant
使用固定区域性的大小写规则,将Unicode字符的值转换为其小写等效项
ToString
将此实例的值转换为其等效的字符串表示
ToUpper
将unicode字符的值转换为它的大写等效项
TryParse
将指定字符串的值转换为它的等效unicode字符
ToUpperInvariant
使用固定区域性的大小写规则,将Unicode字符的值转换为其大写等效项
Char类提供了许多种方法,其中以Is和To开头的比较重要。以Is开头的方法大多是判断Unicode字符是否为某个类别,以To开头的方法主要是转换为其他Unicode字符。
下面是其中几种方法的举例,其他方法的使用类似:
static void Main(string[] args) { char a='a'; //声明字符a char b='x'; //声明字符b //使用IsLetter方法判断a是否为字母 Console.WriteLine("IsLetter方法判断a是否为字母:{0}",char.IsLetter (a)); //使用IsDigit方法判断b是否为数字 Console.WriteLine("IsDigit方法判断b是否为数字:{0}",char.IsDigit (b )); Console.ReadLine(); }
运行结果如下图:
通常情况下数据源中会含有大量数据,而一张报表会根据用户的需要展示其中的一小部分。这时您需要使用筛选来选择用户需要的数据,比如在显示客户信息表时,我们可以根据用户需要,使用筛选让报表只显示某个特定地区的数据。您甚至可以让用户在运行报表时指定一个值做为筛选值来筛选数据。本章将讨论在BIRT报表中如何使用筛选。出于报表性能方面的考虑,我们建议您在设计报表时仅从数据源获取制作报表需要使用的数据。根据数据源类型与您制作报表类型的不同,BIRT报表提供了多种方法来筛选数据。筛选的第一个时机是使用您数据源提供的筛选功能。比如支持 JDBC 的数据库可以让用户在SQL 查询语句中加入WHERE 子句来筛选数据。事实上,使用数据库的筛选功能来筛选数据的性能是最优的。在BIRT报表从数据源取回数据之后,在报表设计的许多地方您还可以设置筛选,至于在什么地方、什么时候来筛选则大大取决于您自己的需要。比如一个表格和一个列表包含了相似的数据,仅仅是筛选条件不同,那么您可以只创建一个数据集,然后在表格和列表上分别做筛选,而不用为表格和列表各做一个数据集。因为前一种情况只访问数据库一次。
当您使用 JDBC 数据源创建SQL SELECT 查询类型的数据集时,您可以在SELECT查询语句中加入WHERE 条件子句来从数据库查询数据,您可以在WHERE 条件子句定义查询条件,从而实现对数据库中的数据进行筛选。比如下面的 SQL 语句让数据库仅返回客户国家为China 的客户信息:
SELECT *
FROM Customer
WHERE country = 'China'
而下面的SQL 语句则让数据库仅返回客户国家为China,且信用额度超过10000 的客户信息:
SELECT customerName
FROM Customer
WHERE country = 'USA'
AND creditLimit > 10000
假定您已经创建了 JDBC 数据源并使用该数据源创建了SQL SELECT 查询数据集。在数据资源管理器中,双击您需要添加筛选的数据集,打开“编辑数据集”窗口。在查询页面的 SQL 语句编辑区中,添加一个WHERE 子句并定义您的筛选条件。点击“预览结果”,查看数据集返回的结果是否按照您定义的筛选条件进行了筛选。
关于如何编写 SQL WHERE 语句,请查阅SQL 相关资料。
当您使用 XML 数据源创建数据集时,您需要将XML 元素与属性映射至数据集列来指定从XML 中获取哪些数据。为了将XML 元素或属性映射至列,您需要编写XPath。XPath是XML 的查询语言,如果您对XPath 不熟悉,建议您先去了解XPath 的相关资料。
筛选XML 数据源中的数据时,您可以在XPath 语句中指定一个筛选值来筛选数据,比如下面的XPath 语句则让数据源只返回作者名字为”Sally Bush”的信息。
Author[@name=”Sally Bush”]
除了设置在数据源中筛选数据外,您还可以在其他地方筛选数据。当然,我们建议您尽可能在数据源中筛选数据,但是有些数据源中,比如扁平文件数据源,你就不能在数据源中筛选数据。这样您需要在BIRT报表中筛选数据。另外,有些时候SQL 的WHERE 子句并不能满足您的筛选需求,而BIRT报表提供了更多的筛选功能,并且提供了一个可视化的筛选编辑工具来帮助您对数据进行筛选
下面是您在BIRT报表可以设置筛选的地方,您可以在任意一个或多个地方设置筛选
� 数据集
� 报表元素,如表格或列表
� 组
BIRT报表中筛选的第一时机是在数据集上。当报表中只有一个元素使用该数据集,或者当报表中所有元素使用的数据都一样时,您可以在数据集上设置筛选。下图设置了数据集上的过滤器,选择国家为’USA’,城市为’NJ’:
接下来您可以在报表元素上设置筛选。您可以编辑报表元素的筛选属性来指定该元素显示哪些数据。当报表中有多个表格、列表或图表使用同一个数据集,但各自只展现数据集中一部分特定数据的时候,您可以在报表元素上设置筛选。比如您创建了一个数据集,该数据集返回所有国家为 USA 的客户信息。然后在报表设计中有两个报表元素使用了该数据集,比如一个表格和一个列表,那么您可以在表格和列表上分别设置筛选,让它们显示不同的信息。
如下图,我们表的属性中设置了2个过滤器,分别为:
row["CREDITLIMIT"] Top n 100
row["COUNTRY"] 等于 "Canada"
预览结果如下:
最后,您可以在分组上设置筛选。如果您在表格或列表中创建了分组,那么您可以在“创建组”或“编辑组”窗口的筛选标签页里设定分组的筛选,来让表格或列表只显示符合特定条件的分组。比如按客户分组的销售订单统计报表,您可以设定只显示总计订购额达到某个值的客户的订单信息,而不用显示所有客户的订单信息。
如前所述,在BIRT报表中您有三个地方可以设置筛选,您可以根据需要来选择在什么地方设置筛选。以下就是我们给您的几点建议:
� 当您在数据集上设置筛选时,BIRT报表是对数据源取回所有数据进行筛选。
� 当您在报表元素上设置筛选时,BIRT报表是对与该报表元素绑定的数据集中的所有数据进行筛选。
� 当您在分组上设置筛选时,BIRT报表是对组级别的数据进行筛选,通常我们会在筛选条件中使用聚合表达式。比如在前面的例子中,您在分组上设置筛选时,您可以对每个组的国家名或客户总数进行筛选;而不可以对客户名称或客户电话等属于组内明细数据进行筛选。
� 凡是在筛选条件中使用了聚合表达式的筛选只能应用在分组上。在某些情况下同样的筛选条件被设置在不同的地方会产生同样的结果。比如在前面的例子中,您想只显示国家名以A 开头的各个国家的客户信息,那么您可以在数据集、表格或分组上设置同样的筛选条件来达到这一效果。
在BIRT报表中,您可以根据需要创建不同的筛选条件类型来对数据进行筛选,比如您可以设置筛选条件让BIRT报表返回数据中指定列值等于一个特定的值的所有行,或者返回指定列值位于一个特定区间内的所有行,再或者返回指定列值与一个特定字符串模式匹配的所有行等等。
在设置筛选时,BIRT报表把筛选条件运算符直接以名称的方式给您显示,而非实际的运算符,比如BIRT报表直接显示名称“大于”,“小于”,“类似”等,而不是>, <, like 等。下面的表格给您列出了BIRT报表支持的各种筛选条件类型。大多数的筛选运算符可以应用在所有数据类型上。需要注意的是在这些运算符当中有两个模式匹配运算符:类似与匹配(like 与match)。“类似”运算符可以让熟悉SQL 的用户使用SQL 语法来指定模式匹配表达式。而“匹配”运算符则让熟悉JavaScript 的用户使用JavaScript 正则表达式语法来指定模式匹配表达式。
筛选条件
描述
示例
比较
比较字段值与指定值
row["quantity"] 小于 10
row["custName"] 等于 "Acme Inc."
row["custName"] 大于或等于"P"
row["custState"] 不等于 "CA"
row["orderDate"] 小于或等于 "06/30/05"
空值
测试字段值是否为空
row["manager"] 为Null
row["shipDate"] 不为Null
区间
测试字段值是否在指定区间内,区间两端包含在内
row["quantity"] 介于 50 与 100
row["custName"] 介于 "A" 与 "B"
row["custName"] 不介于 "A" 与 "M"
row["orderDate"] 介于"06/01/05" 与 "06/30/05"
条件逻辑
测试
ctrl+c / ctrl+v 真是害死人,看起来简单的东西,往往却又很容易出问题
究其原因,还在于只知其表不知其里,容易想当然。
今天遇到的问题是简单调用string::replace替换子串的问题,如:
std::string sTest1 = "12x567890"; std::string sTest2 = sTest1; std::string sSub = "x"; std::string sRepl = "34"; int index = sTest1.find(sSub.c_str()); sTest1.replace(index, index+strlen(sSub.c_str()), sRepl); // sTest1 == "12347890" 错误,按这种方式抄了下用法 index = sTest2.find(sSub.c_str()); sTest2.replace(index, index+strlen(sSub.c_str()), sRepl.c_str()); // sTest2 == "12347890" 错误// sTest2.replace(index, strlen(sSub.c_str()), sRepl.c_str()); // sTest2 == "1234567890" 正确以上sTest2的结果不是想要的,其原因在于函数重载,第三个参数类型不一样前两个参数含义是不一样的。
查看replace实现源码,其功能注释是很清楚的。
看来太习惯于隐式类型转换,如const char* -> string ,不是什么好习惯。
===================写到这里,我发现还在犯错误
标准std::string::replace,sTest1替换的语法应该是通不过的而我能通过是因为用的stlport代替标准库。。。
作者:powerlly 发表于2013-1-8 16:05:50 原文链接阅读:12 评论:0 查看评论