哲理小故事:Attitude很重要吗?

有一个经典的小故事,用一种方法来证明“attitude很重要”:

如果令 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于百分之 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
那么Hard work (努力工作)

H+A+R+D+W+O+R+K 8+1+18+4+23+15+18+11 = 98%

Knowledge(知识)

K+N+O+W+L+E+D+G+E 11+14+15+23+12+5+4+7+5 = 96%

Love(爱情)

L+O+V+E12+15+22+5 = 54%

Luck(好运)

L+U+C+K12+21+3+11 = 47%

(这些我们通常认为重要的东西往往并不是最重要的)

什么能使得生活变得圆满?

是Money(金钱)吗? …

不! M+O+N+E+Y = 13+15+14+5+25 = 72%

是Leaadership(领导能力)吗? …

不! L+E+A+D+E+R+S+H+I+P = 12+5+1+4+5+18+19+9+16 = 89%

那么,什么能使生活变成100%的圆满呢?

每个问题都有其解决之道,只要你把目光放得远一点!

ATTITUDE(心态)

A+T+T+I+T+U+D+E 1+20+20+9+20+21+4+5 = 100%

我们对待工作、生活的态度能够使我们的生活达到100%的圆满。”

我的问题是:除了态度,是否有其他“能够使我们的生活达到100%的圆满”的?

经过查找,至少还有下面的单词:

accumulate|v.积聚,堆积
acknowledge|vt.承认,答谢,报偿
adulthood|n.成人期
affectation|n.假装,虚饰,做作
alienation|n.疏远,转让
analysis|n.分析,分解
anterior|adj.前面的,在前的
apoplectic|n.患中风者adj.中风的,易患中风的
appertain|v.属于
apropos|adj.adv.适当地,恰好的
attitude|n.姿势,态度,看法,意见
avocation|n.(个人)副业,业余爱好
awfully|adv.非常,很,十分
benediction|n.祝福
blissful|adj.有福的
botanist|n.植物学家
bouillon|n.肉汤,牛肉汤
boundary|n.边界,分界线
boycott|n.vt.联合抵制,联合排斥某国货物或与某国绝交
bronchus|n.[医]支气管
cacophony|n.刺耳的音调,不协和音,杂音
candidature|n.候选人的地位,候选人资格
carpenter|n.木匠
chimpanzee|n.[动]非洲的小人猿,黑猩猩
clockwise|adj.顺时针方向的adv.顺时针方向地
companion|n.同伴,共事者
comport|v.相称
congenital|n.adj.天生的,先天的,天赋的
congress|n.(代表)大会,[C~](美国等国的)国会,议会
connivance|n.假装不见,纵容,默许
contented|adj.满足的,心安的
corridor|n.走廊
crudity|n.生,生硬,不熟
culture|n.文化,文明
debarkation|n.下车,下船,登陆
declarative|adj.宣言的,公布的
declension|n.[文法]词尾变化,格变化,倾斜,衰退
decorous|adj.有礼貌的
deliquesce|vi.溶解,解除,液化
delivery|n.递送,交付,分娩,交货,引渡n.[律]财产等的正式移交发送,传输
demobilize|v.复员
denominate|vt.命名adj.有说明性名称的
depletion|n.损耗
dinginess|n.暗淡,肮脏
discernible|adj.可辨别的
discipline|n.纪律,学科v.训练
discommode|vt.使不方便,使为难,使不自由
discredited|adj.不足信的,不名誉的
distrait|adj.心不在焉的
dogmatize|v.武断地提出
drizzle|n.细雨v.下毛毛雨
dumbfound|v.使人哑然失声,使发楞
ebullient|adj.冒泡的,沸腾的,热情的,热情洋溢的
elsewhere|adv.在别处
emasculate|vt.阉割,使柔弱,删削,使无力adj.阉割了的,柔弱的
embodiment|n.体现,具体化,化身
emendation|n.修订,校正,修正
empathetic|adj.(empathic)移情作用的,感情移入的
espouse|vt.嫁娶,支持,赞成
eulogize|vt.称赞,颂扬
eventual|adj.<古>可能的,最后的,结局的,万一的,终于的
excellent|adj.卓越的,极好的
excoriate|v.批判
fatalistic|adj.宿命论的
fatherhood|n.父亲的身份,父性,父权
fluorine|[化]氟(9号元素,符号F)
fountain|n.泉水,喷泉,源泉
groggily|adv.酒醉地,东倒西歪地
grumpy|adj.脾气坏的,性情乖戾的,脾气暴躁的
gullibly|
healthily|adv.健康地
hirsute|adj.多毛的,有粗毛的
hobbyist|n.沉溺于某种癖好者,嗜某爱好成癖的人
holograph|n.亲笔文件,[律]亲笔信,[物]全息图
honeycomb|n.蜂房,蜂巢,蜂脾
hospital|n.医院
imbroglio|n.杂乱的一团,纠葛,纷扰,误解
immature|adj.不成熟的,未完全发展的
inadequacy|n.不充分
inapplicable|adj.不适用的
inefficient|adj.效率低的,效率差的,(指人)不能胜任的,无能的
inflation|n.胀大,夸张,通货膨胀,(物价)暴涨
innovate|vi.改革,创新
inoculate|vt.接种,嫁接
insecticide|n.杀虫剂
intellect|n.智力
interfere|vi.干涉,干预,妨碍,打扰
irritate|vt.激怒,使急躁v.刺激
judiciary|adj.司法的,法院的n.司法部,司法官,审判员
leaderless|adj.无领袖的
liberalism|n.自由主义
liberator|n.解放者,释放者
lightning|n.闪电(“闪电”)英国第一种超音速喷气式战斗机,英60年代的主力机种。
likelihood|n.可能,可能性
limpidly|adv.清澈地,透明地
litotes|n.间接肯定法,反语法
lubricant|n.滑润剂
macrocosm|n.宏观世界
magnetize|vt.使磁化,吸引vi.受磁
martinet|n.规律严肃的人,严格的人
masochism|n.[心]性受虐狂,受虐色情狂,受虐狂
maximize|vt.取…最大值,最佳化
mercantile|adj.商人的,商业的,经商的,重商主义的,以金钱为目的的
mercurial|adj.墨丘利神的,水星的,雄辩机智的,活泼善变的,水银的n.水银剂,汞剂
merrily|adv.愉快地,高兴地
misdirect|vt.误导,写错地址
molecular|adj.[化]分子的,由分子组成的
nastily|adv.污秽地,不洁地
nestling|n.未离巢的雏鸟,婴儿
nihilist|n.虚无主义者
nostalgic|adj.乡愁的,怀旧的
operetta|n.小歌剧
ornament|n.装饰物,教堂用品vt.装饰,修饰
outset|n.开端,开始
palpitate|v.跳动
pasture|n.牧地,草原,牧场v.放牧,牧(牛、羊)等,吃草
personage|n.要人,名流,个人
personal|adj.私人的,个人的,亲自的,容貌的,身体的,人身的,针对个人的adj.[语法]人称的
perturb|v.感到不安
plastered|adj.醉醺醺的
plebiscite|n.平民制定法,公民投票
plummet|n.铅锤,重荷vi.垂直落下
plumule|n.幼芽,棉毛
postdate|vt.填迟…的日期n.事后日期
preordain|vt.预定,预先注定命运
prevent|v.防止,预防
primary|adj.第一位的,主要的,初步的,初级的,原来的,根源的
printer|n.印刷工,打印机
producer|n.生产者,制作者,演出人,(电影)制片人
profuse|adj.极其丰富的
progeny|n.后裔
promisee|n.[律]受约人,承诺人
pumpkin|n.南瓜
pursue|vt.追赶,追踪,追击,继续,从事
quadrangle|n.四角形,四边形,方院,方庭(尤指牛津大学等学院中者)
quarry|n.采石场,(知识、消息等的)来源vt.挖出,苦心找出vi.费力地找
quarter|n.四分之一,方向,地区,方面,季,季度,一刻钟num.四分之一,刻
radiocarbon|n.放射性碳,碳的放射性同位元素
raillery|n.开玩笑,逗趣
receptor|n.接受器,感受器,受体
reciprocal|adj.互惠的,相应的,倒数的,彼此相反的n.倒数,互相起作用的事物
refinery|n.精炼厂
renovate|vt.革新,刷新,修复
repress|vt.<美>再压,补充加压vi.压制
reprint|v.再版
reprobate|v.非难
reputable|adj.著名的
reshuffle|n.改组v.改组
restore|vt.恢复,使回复,归还,交还,修复,重建
retiring|adj.退休的
reversal|n.颠倒,反转,反向,逆转,撤销
saintly|adj.圣洁的
salacious|adj.猥亵的,好色的
savory|adj.风味极佳的,可口的,味美的n.使人开胃的菜肴
scuttle|n.天窗,舱室小孔,煤桶,急速逃走vi.急促地跑,急忙撤退vt.凿沉,毁坏,毁坏
selective|adj.选择的,选择性的
session|n.会议,开庭
shattered|粉碎
shibboleth|n.口令
simulate|vt.模拟,模仿,假装,冒充
smitten|v.smite的过去分词
snobbery|n.势利
socialism|n.社会主义,社会主义运动
spirited|adj.英勇的
splashy|adj.易溅的,泼溅的,有色斑的
squint|v.斜视
status|n.身份,地位,情形,状况
stress|n.重压,逼迫,压力,重点,着重,强调,重音vt.着重,强调,重读
subsume|v.包容,包含
surcharge|n.超载,追加罚款,额外费vt.使装载过多,追加罚款
surely|adv.的确地,安全地
swollen|adj.肿胀的
syndicate|n.企业联合,[经]辛迪加,财团v.联合成辛迪加
synergic|adj.协作的,合作的
telephone|n.电话,电话机v.打电话
telescope|n.望远镜v.压缩
temperance|n.节欲,戒酒,禁酒,(气候等的)温和
temporal|adj.时间的,当时的,暂时的,现世的,世俗的,[解]颞的n.世间万物,教会财产
therefore|adv.因此,所以
thickening|n.使变厚,增厚过程
thirty|num.三十
thorny|adj.多刺的,痛苦的
towards|prep.向,朝,对面,接近,对,有助于
traction|n.牵引
truism|n.真实性
turkey|n.火鸡,无用的东西
undergird|v.加强,巩固…的底部
underlay|vt.铺在…下面,垫起vi.向下延伸n.衬垫物
unfasten|vt.解开,放松
unkempt|adj.蓬乱的,粗野的,不整洁的
useless|adj.无用的,无效的,无益的,无价值的
utensil|n.器具
variety|n.变化,多样性,种种,品种,种类
verbalize|v.描述
vouchsafe|vt.赐予,允许
whenever|conj.无论何时,随时n.只要
whiskey|n.威士忌酒adj.威士忌酒的
wholesale|n.批发,趸售adj.批发的,[喻]大规模的
writing|n.笔迹,作品,著述

我只想说明,态度真的很重要,许许多多年前我就发现了这一点,以至于我的师父曾经夸奖过我“有错误马上就承认,但是改不改就是另外的事情”。

但是用上面字母累加的方式来证明这一点是非常愚蠢的做法,弱智到20年前国产《知音》杂志的水平。

wordscore

可执行文件+源程序+字典文件

ScoreWords

使用Indy10实现的简单的 Console下发送邮件

使用Indy10实现的简单的 Console下发送邮件

这个例子使用了 Indy10 通过 SMTP来发送邮件。通过命令行参数来指定文件的内容(Body),并且能够添加附件。

使用方法例如:

scmail /server[smtp.sina.com] /to[405623608@qq.com] /from[zoologist@sina.com] /subject[Hi, buddy] /body[c:\body.txt] /atta[c:\1.bin] /user[zoologist@sina.com] /password[xxxx]

当然,上面的to可以换成你自己的邮箱,from和user 需要填写为你自己的邮箱地址,还有最后的密码也要填写上你自己邮箱的密码(目前免费邮箱发送邮件都要进行身份验证,当然你也可以临时注册一个邮箱)。

运行结果:

scmail

代码和可执行程序

scmail

Ubuntu 遇到能看到但是无法执行的可执行程序的解决办法

64位 Ubuntu 下,可能出现出现一个能看到但是无法执行的可执行文件。尝试执行时,会出现 “bash: ./name: No such file or directory”的错误提示。

产生这个问题的一个原因可能是:你的可执行程序是 32位的,而系统是64位的,所以无法正常执行(当然在这步之前还请确定权限正确)。

最后解决方法是:用下面命令安装一个兼容库

sudo apt-get install ia32-libs

之后再尝试执行之前的程序

取得硬盘分区信息

这一系列文章是根据cutebunny 的BLOG “windows的磁盘操作” 写成的,主要是部分修改原作中的代码,使之兼容Unicode和Windows 7 64bit. 原文可以在下面的网址找到

http://cutebunny.blog.51cto.com 。 本文是参考 “windows的磁盘操作之三——获取和删除磁盘分区信息”写成。

程序实现了获得当前硬盘分区信息的功能。

// getpart.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"

int _tmain(int argc, _TCHAR* argv[])
{
	 HANDLE hDevice;               // handle to the drive to be examined
     BOOL result;                  // results flag
     DWORD readed;                 // discard results
	 DWORD szNewLayout;
	 DRIVE_LAYOUT_INFORMATION_EX *dl = NULL;
	 DWORD	i;

	// 特别注意 DRIVE_LAYOUT_INFORMATION_EX 结构体的大小,即使只有一个分区,也需要预留出4个分区的大小
    // 下面是预留了10个分区的大小。如果直接使用该结构体而不扩大大小会导致 GetLastError =0x7A
     szNewLayout=sizeof(DRIVE_LAYOUT_INFORMATION_EX) + 10 * sizeof(PARTITION_INFORMATION_EX);
	 dl = (DRIVE_LAYOUT_INFORMATION_EX*) new BYTE[szNewLayout];

     hDevice = CreateFile(
                L"\\\\.\\PhysicalDrive0", // drive to open
                GENERIC_READ | GENERIC_WRITE,     // access to the drive
                FILE_SHARE_READ | FILE_SHARE_WRITE, //share mode
                NULL,             // default security attributes
                OPEN_EXISTING,    // disposition
                0,                // file attributes
                NULL            // do not copy file attribute
                );
     if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
     {
         fprintf(stderr, "CreateFile() Error: 0x%X\n", GetLastError());
     }

     result = DeviceIoControl(
                hDevice,               // handle to device
                IOCTL_DISK_GET_DRIVE_LAYOUT_EX, // dwIoControlCode
                NULL,                           // lpInBuffer
                0,                              // nInBufferSize
                dl,           // output buffer
                szNewLayout,         // size of output buffer
                &readed,      // number of bytes returned
                NULL     // OVERLAPPED structure
                );
    if (!result)
    {
        fprintf(stderr, "IOCTL_DISK_GET_DRIVE_LAYOUT_EX Error: 0x%X\n", GetLastError());
        (void)CloseHandle(hDevice);
    }
   
	if (dl->PartitionStyle == PARTITION_STYLE_MBR)
	{
		fprintf(stdout, "It's MBR\n", GetLastError());
	}
	if (dl->PartitionStyle == PARTITION_STYLE_GPT)
	{
		fprintf(stdout, "It's GPT\n", GetLastError());
	}
	if (dl->PartitionStyle == PARTITION_STYLE_RAW)
	{
		fprintf(stdout, "It's RAW\n", GetLastError());
	}
	//PartitionCount 这个参数不准确,它给出的是4的整数倍。要想准确,需要结构体中其他的来确定
	//
    //The number of partitions on the drive. On hard disks with the MBR layout, 
	//this value will always be a multiple of 4. Any partitions that are actually 
	//unused will have a partition type of PARTITION_ENTRY_UNUSED (0) set in the PartitionType 
	//member of the PARTITION_INFORMATION_MBR structure of the Mbr member of the
	//PARTITION_INFORMATION_EX structure of the PartitionEntry member of this structure.
	fprintf(stdout, "There are %d partitions in PhysicalDrive0\n", dl->PartitionCount);

	for (i=0;i<dl->PartitionCount; i++)
	{
		fprintf(stdout, "Partition[%d] Start Ofs[%llX] Length[%lldMB]\n",
				dl->PartitionEntry[i].PartitionNumber, 
				dl->PartitionEntry[i].StartingOffset,
				dl->PartitionEntry[i].PartitionLength.QuadPart / 1024 /1024);
	}
	delete(dl);

	getchar();
	return 0;
}

 

运行结果如下 (注意,运行时需要管理员的权限)
getpart

getpart

参考:
1.cutebunny 的BLOG “windows的磁盘操作” 可以在这里下载 WindowsDisk

前年有段时间对linux0.11感兴趣,顺便用masm翻译了下代码,也没精力去更新它了,现在放出给大家玩玩

运行my目录中的bat文件生成linux.img,然后启动bochsrc.bxrc(2.4.1)可以看到运行的linux0.11啦,因为启动读取了硬盘的文件,所以hdc-0.11.img不能删除。

http://www.lab-z.com/wp-content/uploads/alinux/linux0112013.rar

编写一个最简单的Linux程序

代码如下:

#include <stdio.h>
main()
{
        printf("Hello, A !\n");
}


 

命名为 lab-z.com

gcc -o lab-z lab-z.c

./lab-z 即可运行

1

另外,还可以定义一个宏,输出当前运行到的位置(在Debug Firmware时会很有用)

#include <stdio.h>
#define	dprint( args...) printf(args);printf("%s  %d\n",__FILE__,__LINE__);
main()
{
	printf("Hello,A\n");
	dprint("Hello,B\n");
}

 

就像 http://www.lab-z.com/vc-%E4%B8%AD%E8%BE%93%E5%87%BA%E5%BD%93%E5%89%8D%E8%BF%90%E8%A1%8C%E7%9A%84%E6%96%87%E4%BB%B6%E5%92%8C%E6%89%80%E5%A4%84%E7%9A%84%E8%A1%8C%E6%95%B0%E4%BB%A5%E5%8F%8A%E6%89%80%E5%9C%A8%E5%87%BD/ 这篇文章提到的一样

2

参考:
1.http://ggmmchou.blog.163.com/blog/static/59333149201021512218461/ linux c 002 一个gcc的最简单例子
2.http://www.uml.org.cn/c++/200902104.asp C中的预编译宏定义

海量中文分词 Delphi 例子

简单说“分词”就是指将一个句子拆分为一个个词语。调用的是“海量分词”的DLL库。

海量分词官方网站 http://www.hylanda.com/ (没看到有下载的地方)
试用装下载 http://www.onlinedown.net/soft/39759.htm
例子程序实际来自 https://code.google.com/p/jamessrc/source/checkout

这里我将上面的例子修改为动态调用。其中的 HLSSplit.dat 是DLL自带的分词库,在使用时需要通过 HLSplitInit 来指定这个库的路径。

主要代码例子如下

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
SHLSegWord=record
  s_szWord:pchar  ; //字符串
  s_dwPOS:longint ; //词性标志
  s_fWeight:single; //关键词权重,如果不是关键词,权重为0
end;

  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  THLSplitInit = function (lpszDataFilePath:pchar):boolean;cdecl;
  THLFreeSplit = function (): string;cdecl;
  THLOpenSplit = function ():THANDLE;cdecl;
  THLCloseSplit = function (hHandle:THANDLE ):boolean ;cdecl;
  THLSplitWord = function  (hHandle:tHANDLE ; b:LPCSTR ; iExtraCalcFlag:integer = 0):boolean;stdcall;
  THLGetWordCnt = function (hHandle:tHANDLE ): integer;cdecl;
  THLGetWordAt = function (hHandle:tHANDLE; iIndex:integer):Pointer ;cdecl;

var
  Form1: TForm1;

const HL_CAL_OPT_KEYWORD:Integer = $1; //计算关键词附加标识
const HL_CAL_OPT_FINGER: Integer = $2; //计算文章语义指纹标识
const HL_CAL_OPT_POS: Integer = $4; //计算词性标识
const HL_CAL_OPT_SEARCH: Integer = $8;//输出面向检索的分词结果
const NATURE_D_A:Integer = $40000000; // 形容词 形语素
const NATURE_D_B:Integer = $20000000; // 区别词 区别语素
const NATURE_D_C:Integer = $10000000; // 连词 连语素
const NATURE_D_D:Integer = $08000000; // 副词 副语素
const NATURE_D_E:Integer = $04000000; // 叹词 叹语素
const NATURE_D_F:Integer = $02000000; // 方位词 方位语素
const NATURE_D_I:Integer = $01000000; // 成语
const NATURE_D_L:Integer = $00800000; // 习语
const NATURE_A_M:Integer = $00400000; // 数词 数语素
const NATURE_D_MQ:Integer = $00200000; // 数量词
const NATURE_D_N:Integer = $00100000; // 名词 名语素
const NATURE_D_O:Integer = $00080000; // 拟声词
const NATURE_D_P:Integer = $00040000; // 介词
const NATURE_A_Q:Integer = $00020000; // 量词 量语素
const NATURE_D_R:Integer = $00010000; // 代词 代语素
const NATURE_D_S:Integer = $00008000; // 处所词
const NATURE_D_T:Integer = $00004000; // 时间词
const NATURE_D_U:Integer = $00002000; // 助词 助语素
const NATURE_D_V:Integer = $00001000; // 动词 动语素
const NATURE_D_W:Integer = $00000800; // 标点符号
const NATURE_D_X:Integer = $00000400; // 非语素字
const NATURE_D_Y:Integer = $00000200; // 语气词 语气语素
const NATURE_D_Z:Integer = $00000100; // 状态词
const NATURE_A_NR:Integer = $00000080; // 人名
const NATURE_A_NS:Integer = $00000040; // 地名
const NATURE_A_NT:Integer = $00000020; // 机构团体
const NATURE_A_NX:Integer = $00000010; // 外文字符
const NATURE_A_NZ:Integer = $00000008; // 其他专名
const NATURE_D_H:Integer = $00000004; // 前接成分
const NATURE_D_K:Integer = $00000002; // 后接成分


implementation

{$R *.dfm}

function AddNatureString(strWord:string; dwPos:longint):string;
begin
if((dwPos and NATURE_D_A) = NATURE_D_A) then
strWord := strWord +('/a')//形容词
else if((dwPos and NATURE_D_B) = NATURE_D_B) then
strWord := strWord +('/b')//区别词
else if((dwPos and NATURE_D_C) = NATURE_D_C) then
strWord := strWord +('/c')//连词
else if((dwPos and NATURE_D_D) = NATURE_D_D) then
strWord := strWord +('/d')//副词
else if((dwPos and NATURE_D_E) = NATURE_D_E) then
strWord := strWord +('/e')//叹词
else if((dwPos and NATURE_D_F) = NATURE_D_F) then
strWord := strWord +('/f')//方位词
else if((dwPos and NATURE_D_I) = NATURE_D_I) then
strWord := strWord +('/i')//成语
else if((dwPos and NATURE_D_L) = NATURE_D_L) then
strWord := strWord +('/l')//习语
else if((dwPos and NATURE_A_M) = NATURE_A_M) then
strWord := strWord +('/m')//数词
else if((dwPos and NATURE_D_MQ) = NATURE_D_MQ) then
strWord := strWord +('/mq')//数量词
else if((dwPos and NATURE_D_N) = NATURE_D_N) then
strWord := strWord + ('/n')//名词
else if((dwPos and NATURE_D_O) = NATURE_D_O) then
strWord := strWord +('/o')//拟声词
else if((dwPos and NATURE_D_P) = NATURE_D_P) then
strWord := strWord +('/p')//介词
else if((dwPos and NATURE_A_Q) = NATURE_A_Q) then
strWord := strWord +('/q')//量词
else if((dwPos and NATURE_D_R) = NATURE_D_R) then
strWord := strWord +('/r')//代词
else if((dwPos and NATURE_D_S) = NATURE_D_S) then
strWord := strWord +('/s')//处所词
else if((dwPos and NATURE_D_T) = NATURE_D_T) then
strWord := strWord +('/t')//时间词
else if((dwPos and NATURE_D_U) = NATURE_D_U) then
strWord := strWord +('/u')//助词
else if((dwPos and NATURE_D_V) = NATURE_D_V) then
strWord := strWord +('/v')//动词
else if((dwPos and NATURE_D_W) = NATURE_D_W) then
strWord := strWord +('/w')//标点符号
else if((dwPos and NATURE_D_X) = NATURE_D_X) then
strWord := strWord +('/x')//非语素字
else if((dwPos and NATURE_D_Y) = NATURE_D_Y) then
strWord := strWord +('/y')//语气词
else if((dwPos and NATURE_D_Z) = NATURE_D_Z) then
strWord := strWord +('/z')//状态词
else if((dwPos and NATURE_A_NR) = NATURE_A_NR) then
strWord := strWord +('/nr')//人名
else if((dwPos and NATURE_A_NS) = NATURE_A_NS) then
strWord := strWord +('/ns')//地名
else if((dwPos and NATURE_A_NT) = NATURE_A_NT) then
strWord := strWord +('/nt')//机构团体
else if((dwPos and NATURE_A_NX) = NATURE_A_NX) then
strWord := strWord +('/nx')//外文字符
else if((dwPos and NATURE_A_NZ) = NATURE_A_NZ) then
strWord := strWord +('/nz')//其他专名
else if((dwPos and NATURE_D_H) = NATURE_D_H) then
strWord := strWord +('/h')//前接成分
else if((dwPos and NATURE_D_K) = NATURE_D_K) then
strWord := strWord +('/k')//后接成分
else
strWord := strWord +('/?');//未知词性
Result:=strWord;
end;

procedure TForm1.Button1Click(Sender: TObject); //stdcall;
var
bSuccess:bool;
b:LPCSTR;
hHandle,DllHandle:tHANDLE;
i,iExtraCalcFlag,nResultCnt:integer;
strResult,strWord:string ;
pWord:^SHLSegWord ;
  HLSplitInit:THLSplitInit;
  HLFreeSplit:THLFreeSplit;
  HLOpenSplit:THLOpenSplit;
  HLCloseSplit:THLCloseSplit;
  HLSplitWord:THLSplitWord;
  HLGetWordCnt:THLGetWordCnt;
  HLGetWordAt:THLGetWordAt;

begin
  DllHandle:=LoadLibrary(PAnsiChar('HLSSplit.dll'));
  if DllHandle=0 then
    begin
      ShowMessage('Loading DLL Error!');
      exit;
    end;
	
  @HLSplitInit:=GetProcAddress(DllHandle,'HLSplitInit');
  @HLFreeSplit:=GetProcAddress(DllHandle,'HLFreeSplit');
  @HLOpenSplit:=GetProcAddress(DllHandle,'HLOpenSplit');
  @HLCloseSplit:=GetProcAddress(DllHandle,'HLCloseSplit');
  @HLSplitWord:=GetProcAddress(DllHandle,'HLSplitWord');
  @HLGetWordCnt:=GetProcAddress(DllHandle,'HLGetWordCnt');
  @HLGetWordAt:=GetProcAddress(DllHandle,'HLGetWordAt');

    if  (Not Assigned(@HLSplitInit)) or
        (Not Assigned(@HLOpenSplit)) or
        (Not Assigned(@HLCloseSplit)) or
        (Not Assigned(@HLSplitWord)) or
        (Not Assigned(@HLGetWordCnt)) or
        (Not Assigned(@HLGetWordAt))
    then  
      begin
	    showmessage('Loading function Error!');
	    exit;
	 end;  

     //这里说的是词库文件的路径,空表示当前路径
    if(not HLSplitInit('')) then
	 begin
       ShowMessage('海量分词初始化失败!');
	   Exit;	
	 end;

	//创建分词句柄
	hHandle:= HLOpenSplit ();
	if(hHandle = INVALID_HANDLE_VALUE) then
		begin
		  //创建分词句柄失败
		  ShowMessage('创建分词句柄失败!') ;
		  HLFreeSplit () ;//卸载分词字典
		  exit;
		end ;

	//分词并对分词结果进行处理
	iExtraCalcFlag:=HL_CAL_OPT_POS; //附加计算标志,词性计算
	b:=pchar(Memo1.Text);
	bSuccess:= HLSplitWord (hHandle, b, iExtraCalcFlag);

	strResult:= ' ' ;
	if(bSuccess) then
		//分词成功
		begin
			nResultCnt := HLGetWordCnt (hHandle);//取得分词个数
			Label1.Caption:=inttostr(nResultCnt);

			for i:=0 to nResultCnt-1 do
				//取得分词结果
				begin
					pWord:= HLGetWordAt(hHandle , i);//取得一个分词结果
					if pWord.s_szWord<>'' then
						begin
							strWord:=(pWord.s_szWord); //PChar(pWord.s_szWord);
							if(iExtraCalcFlag=HL_CAL_OPT_POS) then//词性
							strWord :=AddNatureString(strWord,pWord.s_dwPOS); //显示词性标准
							strResult := strResult+strWord;
							strResult :=strResult+ (' ') ; //以空格分割分词结果中的每个词
						end
				end
		end
	else
	//分词失败
		begin
		  ShowMessage('分词失败!') ;
		end;
		//卸载分词词典
		//关闭分词句柄
		HLCloseSplit(hHandle);
		//卸载海量分词
		HLFreeSplit();
	Memo2.Text:=strResult;
  FreeLibrary(DllHandle);
end;

end.

 

slip

下载 http://www.lab-z.com/wp-content/uploads/delphi/hlzw.zip

编译 UEFI Application 时遇到 This function or variable may be unsafe 的解决办法

在编译UEFI 程序时,可能会遇到下面的提示信息,同时如果打开了 warning as error,编译过程就会停止下来。

Warning 1 warning C4996: ‘xxxx’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

产生这个问题的原因是一些老的库函数中包含了不安全的函数,比如可能被溢出攻击的函数。解决方法是将这个函数替换成更安全的函数,替换函数大多数是在函数名后面加入一个”_s” (这段我没有验证过)。更简单的方法是在出现问题的文件开头加入下面的代码来关闭提示让编译进行下去

#pragma warning(disable:4996)

参考:

1.http://www.rosoo.net/a/200803/6911.html
2.http://blog.csdn.net/xuleilx/article/details/7281499