C# 求带搜索指定目录文件模糊关键词,点击输出结果的并打开该文件的代码

C# 求带搜索指定目录文件模糊关键词,点击输出结果的并打开该文件的代码,第1张

写完整的例子比较麻烦,给你写下关键几个过程的代码好了,相信不会差很多,我用记事本写的代码,你自己调试,也算能学到一点东西:

比如,路径名放在变量sStartPath里,要搜索的文件名关键字放在sKey变量中,一点搜索,代码如下:

private void btnSearch_Click()

{

    string sKey = txtKeyText;

    string sStartPath = txtStartPathText;

    List<string> lstFiles = new List<string>();

    Search(sStartPath, sKey, lstFiles);

    thislistBoxResultItemClear();

    thislistBoxResultItemAddRang(lstFiles); // 这里我记不清了,如果没有AddRang方法,就写个for循环,把所有的结果都放到你的listBox好了。

}

// 递归搜索文件

private void Search(string sStartPath, string sKey, List<string> lstResult)

{

    // 看看这个目录下的文件

    var arFiles = PathGetFiles(sStartPath + "\\"); //大概是这个参数,如果不是,你查查帮助,把参数调整一下好了。

    // Linq找出所有包括了关键字的内容, 不懂得的话,也可以写一个for循环来一个个文件名判断是不是包括关键字

    var arMaches = from f in arFiles 

            where fContain(sKey)

            select f;

    lstResultAddRange(arMaches);

    

    // 处理子目录

    var arSubDirs = PathGetDirectors(sStartPath + "\\");

    foreach(var sSubDir in arSubDirs)

    {

        // 如果这个目录本身符合关键字,也做为结果。

        if(sSubDirContain(sKey))

            lstResultAdd(sSubDir);

            

        // 搜索它的下面的文件。

        Search(sSubDirs, sKey, lstResult); // 搜索子目录们

    }

}

// 这里是双击列表项的代码

private void lstResult_Double()

{

    SystemDiagnosticsProcessStart(thislistBoxResultSelectedItem);

}

我用记事本写的,就算是有问题,也不会差得很多,细节稍微调试一下就行了。

package test;

import javaioBufferedReader;

import javaioFile;

import javaioFileInputStream;

import javaioFileNotFoundException;

import javaioIOException;

import javaioInputStream;

import javaioInputStreamReader;

import javautilArrays;

import javautilScanner;

public class Test5 {

public static void main(String[] args) throws IOException {

String path = "D:\\aatxt";//文件位置

File file = new File(path);

try {//读取文件内容

InputStream in = new FileInputStream(file);

InputStreamReader reader = new InputStreamReader(in);

BufferedReader br = new BufferedReader(reader);

String line = null;

while( (line=brreadLine()) != null){

//如果是数组则读出数据

if('['==linecharAt(0) && ']'==linecharAt(linelength()-1)){

//将读出的字符串转成数组

line = linesubstring(1);

line = linesubstring(0,linelength()-1);

String[] array = linesplit(",");

//不知道你要怎么运算,目前就给数组中的每个数字加上用户输入的字符

Systemoutprint("从文件中读出的数组:");

Systemoutprintln(ArraystoString(array));

Systemoutprintln("请输入加上的字符/字符串:");

Scanner sc = new Scanner(Systemin);

String userStr = scnextLine();

//加上用户输入的数据

for(int i=0;i<arraylength;i++){

array[i] += userStr;

}

Systemoutprint("修改后的数组:");

Systemoutprintln(ArraystoString(array));

}

}

} catch (FileNotFoundException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

}

}

java读入文件,并逐行输出,先在D://home建立个文件夹,然后创建一个atxt文件,然后编辑文件,文本编辑的编码是utf-8,然后用流逐行读取输出,如下:

import javaioBufferedInputStream;

import javaioBufferedReader;

import javaioFile;

import javaioFileInputStream;

import javaioInputStream;

import javaioInputStreamReader;

public class TestC {

public static void main(String[] args){

//获取要读取的文件

 File readFile=new File("D://home/atxt");

 //输入IO流声明

        InputStream in=null;

        InputStreamReader ir=null;

        BufferedReader br=null;

        

        try {

         //用流读取文件

in=new BufferedInputStream(new FileInputStream(readFile));

//如果你文件已utf-8编码的就按这个编码来读取,不然又中文会读取到乱码

ir=new InputStreamReader(in,"utf-8");

//字符输入流中读取文本,这样可以一行一行读取

br= new BufferedReader(ir);

String line="";

//一行一行读取

while((line=brreadLine())!=null){

Systemoutprintln(line);

}

        } catch (Exception e) {

eprintStackTrace();

}finally{

//一定要关闭流,倒序关闭

try {

if(br!=null){

brclose();

}

if(ir!=null){

irclose();

}

if(in!=null){

inclose();

}

} catch (Exception e2) {

}

}

    

}

}

结果:

helloworld

您好

123456

读入和排序不能写在一个for循环中,因为后面数据还未读到无法进行整体排序

要先用一个for循环将所有数据读入到数组,再用两个for循环对数组整体进行排序

而且fscanf读入数组每个数的地址要用 &a[i] 或 a+i,a代表&a[0],所以用&a是不对的

修改后的代码和运行结果如下:

代码中先将测试数据写入文件,再对文件进行读取和排序,输出结果正确,望采纳~

附源码链接:文件读取并排序

第一种

#define printf(fmt,) fprintf(openedfile,fmt,__VA_ARGS__)

然后在你第一次用printf之前,打开文件就可以了。

第二中

在第一次printf之前

freopen("c:\\logtxt","w+",stdout)

由于工作需要在一大堆日志里面提取相应的一些固定字符,如果单纯靠手工取提取,数据量大,劳心劳力,于是自然而然想到了用Python做一个对应的提取工具,代替手工提取的繁杂,涉及中文字符,正则表达式不好匹配,但不是不可以实现,这个以后优化时再说。

需求描述:

一个父目录中存在多个子文件夹,子文件夹下有多个txt形式化的Log日志,要求从所有地方Log日志中找出CardType=9, CardNo=0时的CardID的值,并将其统计存储到一个文本文件中,要求CardID不能够重复。

需求解析:

首先获取所有的Log日志的全路径,根据路径分别加载到将各个Log日志加载到内存中进行提取分析,并将结果存储到给定的文本文件中。

解决方案:

为了尽可能的简洁通用,这里使用配置文件作为输入变量的依据。不多说,上代码:

配置文件如下:

103文件夹下有两个文件:log1txt和log2txt, 内容类似如下:

Python代码实现如下:

# -- coding: utf-8 --

#!/usr/bin/python

# filename: picktoolspy

# codedtime:2015-3-25

import os

import configparser

# 遍历一个目录,输出所有文件名

def itemsbrowse(path):

for home, dirs, files in oswalk(path):

for filename in files:

yield ospathjoin(home, filename)

# 给的文件中查找对应的字符串所在行      

def findchars(filename, chars):

file = open(filename, 'r')

for eachline in file:

if eachlinefind(chars) >= 0:

yield eachline

fileclose()

# 添加到指定的文件

def addtofile(filename, mygenerator):

file = open(filename, 'a')   # 追加方式打开

for line in mygenerator:

filewrite(line)

fileclose()

# 过滤重复的字符行

def filter(filename):

mylist = []

file = open(filename, 'r')

for eachline in file:

mylistappend(eachlinestrip())

fileclose()

file2 = open(ospathsplitext(filename)[0] + '_filtertxt', 'w')

for line in list(set(mylist)):

print(line, file = file2)

#file2write(line)

file2close()

def excute():

iniconf = configparserConfigParser()

iniconfread('configini')

ifile = iniconfget('setting', 'ifilepath')

ofile = iniconfget('setting', 'ofilepath')

chars = iniconfget('setting', 'searchstr')

for fullname in itemsbrowse(ifile):

mygenerator = findchars(fullname, chars)

addtofile(ofile, mygenerator)

filter(ofile)

if __name__ == '__main__':

excute()

输出结果:输出两个文件resulttxt 和result_filtertxt

心得体会:

1、利用Python去处理一些日常的小任务,可以很方便的完成,相比较C/C++来说,这方面生产力高了不少。

2、本文设计对中文字符的处理,所以使用正则表达式不太怎么方便,但不少不可以,后续版本中会添加对正则的支持!

3、由于初学中,所以代码写的不够精炼简洁,后续进行再优化!

以上就是关于C# 求带搜索指定目录文件模糊关键词,点击输出结果的并打开该文件的代码全部的内容,包括:C# 求带搜索指定目录文件模糊关键词,点击输出结果的并打开该文件的代码、Java语言怎么打开文件上的一个数组并且作为键盘的输出的结果参与运算呢、java怎么读入文件,并逐行输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10180466.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存