word count程序,以及困扰人的宽字符与字符

一个Word Count程序,由c++完成,有行数、词数、能完成路径下文件的遍历。

遍历文件部分的代码如下:

void FindeFile(wchar_t *pFilePath)
    {
        CFileFind finder;
        CString Finddir;
        Finddir.Format(pFilePath);
        BOOL ret = finder.FindFile(Finddir);
        while (ret)
        {
            ret = finder.FindNextFile();
            CString strPath = finder.GetFilePath();
            if (finder.IsDirectory())
            {
                wchar_t *temp = strPath.GetBuffer(0);
                temp += strPath.GetLength();
                while (*temp != (‘\\‘))
                {
                    temp--;
                }
                CString Filename = temp;
                if (Filename == "\\." || Filename == "\\..")
                    continue;//如果是目录不处理
                else
                {
                    FindeFile(strPath.GetBuffer(0));
                    //TRACE("目录:%s\r\n", strPath);
                }
            }
            else
            {
                //TRACE("文件:%s\r\n", strPath);
                wchar_t *test;
                char *TEST;
                test = strPath.GetBuffer(strPath.GetLength());
                TEST = WtoC(test);
                cout << "\n\n文件" << TEST << endl;
                ReadFile(TEST);
            }
        }
        finder.Close();
    }

仍然是上次的问题,使用一些MFC的函数时,不可避免会使用到wchar_t类型的,为此写了两个函数WtoC与CtoW来实现两种字符类型字符串的互相转换,代码如下:

char* WtoC(wchar_t *a)
{
    char* TEST;
    size_t len = wcslen(a) + 1;
    size_t converted = 0;
    TEST = (char*)malloc(len*sizeof(char));
    wcstombs_s(&converted, TEST, len, a, _TRUNCATE);
    return TEST;
}
wchar_t* CtoW(char *a)
{
    size_t len = strlen(a) + 1;
    size_t converted = 0;
    wchar_t *test;
    test = (wchar_t*)malloc(len*sizeof(wchar_t));
    mbstowcs_s(&converted, test, len, a, _TRUNCATE);
    return test;
}

一开始写完时出现了遍历出来的文件名无法转换,不止无法转换,连输出都输出不了。卡在这一部分许久,至今未知其原因(过后此问题又莫名消失了)今后还是尽量少用两种字符类型字符串混用的程序。

查找行数、词数部分的代码就不贴了,写的图森破没什么好说的。

功能控制上使用了命令行参数,第一次使用这种方式。main函数如下:

int main(int argc, char* argv[])
{
    char *filet = "d:\test\t.txt";
    Wc wctest;
    if (argv[1][1] == ‘s‘)
    {
        filet = argv[2];
        wchar_t* F;
        F = CtoW(filet);
        wctest.mod = ‘o‘;
        wctest.HL = 1;
        wctest.FindeFile(F);
        cin >> filet;
        return 1;
    }
    if (argc == 1)
    {
        cout << "缺少参数!" << endl;
    }
    else if (argc == 2)
    {
        wctest.mod = ‘o‘;
        wctest.HL = 1;
        filet = argv[1];
    }
    else if (argc == 3)
    {
        wctest.mod = argv[1][1];
        wctest.HL = 0;
        filet = argv[2];
    }
    else if (argc == 4)
    {
        wctest.mod = argv[1][1];
        if (argv[2][1] == ‘a‘)
            wctest.HL = 1;
        else
            wctest.HL = 0;
        filet = argv[3];
    }
    wctest.ReadFile(filet);
    cin >> filet;
    return 0;
}

参数中 -l 为行数检查、-w为词数检查,-c为字符数检查,-a为高级模式(空行、注释行、代码行),-o为全输出模式,-s为遍历模式。

在参数如下时

对如下的文件夹:

遍历结果如下:

没有对子路径下的文件继续遍历。

时间: 2024-10-09 15:41:31

word count程序,以及困扰人的宽字符与字符的相关文章

Word Count程序(C语言实现)

Word Count 程序 GitHub地址:https://github.com/MansonYe/Word-Count 一.项目简介 Word Count 是用以统计文本文件的字符数.单词数和行数的常用工具. 二.功能分析及实现情况 · 基本功能: 统计file.c的字符数(实现) 统计file.c的单词数(实现) 统计file.c的行数(实现) · 拓展功能: 递归处理目录下符合类型的文件(实现) 显示代码行.空行和注释行的行数(实现) 支持通配符(* , ?)(实现) · 高级功能: 支

软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序

软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序 格式:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c 统计文件字符数支持 -w 统计文件单词数支持 -l 统计文件总行数 2.拓展功能 支持 -a 返回高级选项(代码行 空行 注释行)支持 -s 递归处理符合条件的文件 3.高级功能 支持 -x 程序以图形界面与用户交互 [filename] 是

Asp.net 在配置Microsoft Excel、Microsoft Word应用程序权限时 error: 80070005 和8000401a 的问题

Asp.net 在配置Microsoft Excel.Microsoft Word应用程序权限时 error: 80070005 和8000401a 的解决总 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005. 控制面板->管理工具->组件服务->计算机->我的电脑->DCom配置->找到Microsoft Word文档之后单击属性打开此应用程序的属

Hadoop AWS Word Count 样例

在AWS里用Elastic Map Reduce 开一个Cluster 然后登陆master node并编译下面程序: import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import o

通过简单的Word Count讲解MapReduce原理以及Java实现

MapReduce原理: MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果.简单地说,MapReduce就是"任务的分解与结果的汇总". 在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker:另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的.一个Hadoop集群中

Hadoop AWS Word Count 例子

在AWS里用Elastic Map Reduce 开一个Cluster 然后登陆master node并编译以下程序: import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import o

Spark的word count

word count 1 package com.spark.app 2 3 import org.apache.spark.{SparkContext, SparkConf} 4 5 /** 6 * Created by Administrator on 2016/7/24 0024. 7 */ 8 object WordCount { 9 def main(args: Array[String]) { 10 /** 11 * 第1步:创建Spark的配置对象SparkConf,设置Spark

课堂练习 Word count

1. 团队介绍 团队成员:席梦寒,胡琦 2. 项目计划 我们选第一.二个功能点进行编程. 具体计划: (1).首先爬取网站内容及网页长度: (2).对爬取的文件内容进行word count操作: (3).对选定词语出现频率进行统计. 3. 环境配置 编程语言:python 代码规范: 一.命名规约 1.[强制]所有编程相关命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.反例: _name / __name / $Object / name_ / name$ / Object$ 2

Learn ZYNQ(10) &ndash; zybo cluster word count

1.配置环境说明 spark:5台zybo板,192.168.1.1master,其它4台为slave hadoop:192.168.1.1(外接SanDisk ) 2.单节点hadoop测试: 如果出现内存不足情况如下: 查看当前虚拟内存容量: free -m cd /mnt mkdir swap cd swap/ 创建一个swap文件 dd if=/dev/zero of=swapfile bs=1024 count=1000000 把生成的文件转换成swap文件 mkswap swapfi