2 ren5333800 ren5333800 于 2015.05.27 12:42 提问

老师 请教下,C#问题 对文本内容操作

C# 怎么样删除 文本中 的 一点内容,比如 现在有个文本是
F:\11.txt.
内容: 张三|软件学院|1439同学
张四|软件学院|1439同学
张五|软件学院|1439同学

现在 要删除 张四|软件学院|1439同学 

我大概知道怎么做 ,就是 对文本内容 进行扫描,把扫描的内容 使用ArrartLis类  ,添加
到数组里,再进行 删除, 再又进行重写, 

代码 这可怎么写??

8个回答

wsh1992o
wsh1992o   Rxr 2015.05.27 14:04

强烈建议用List而不是用ArrayList
这涉及一个装箱和封箱的问题,总而言之就是ArrayList的性能不是很好,并且ArrayList有的功能List都有
然后回归问题
命名空间加一个 using System.IO;
然后用string[] s1 = file.ReadAllString("F:\11.txt");
一定要用string[]以及ReadAllString
这样才是按行的读并按行存到字符串数组s里
这样存进去之后
List s2 = new List();
s2=s1.toList();
s2[1]即文本的第二行就是你要删的
直接做s2.removeat(1);
然后把s2再转成string数组
string s3 = s2.toArray();
把s3写入文件就行
file.WriteAllstring("F:\11.txt",s3);

wsh1992o
wsh1992o 回复ren5333800: 那现在你要删除第二个行的数据,也就是s1[1]要删掉,就把s1转成List,也就是s2,然后用List自带的删除操作,把s2下标为1的那行删掉,也就是s2.RemoveAt(1);此时s2[0]=张三|软件学院|1439同学;s2[1]=s1[2]=张五|软件学院|1439同学;之前的s2[1]就被删掉了.最后你再把s2转回成数组,也就是s2.toArray();然后把这个数组输回文件中
大约 3 年之前 回复
wsh1992o
wsh1992o 回复ren5333800: 之前所说的s2=s1.toList(); s1是个字符串类型的数组,这个数组的每一个元素是一个字符串,用来存储文件的每一行内容.那么s1[0]=张三|软件学院|1439同学;s1[1]=张四|软件学院|1439同学;s1[2]=张五|软件学院|1439同学
大约 3 年之前 回复
wsh1992o
wsh1992o 回复ren5333800: List你可以理解成就是一个数组,不过他是动态的.List一样是从下标为0开始遍历.比如说 List<string> studentInfo = new List<string>();就定义了一个名为studentInfo的字符串类型的List,它可以用studentInfo.Add()的方法来添加内容.之前所说的 s2=是
大约 3 年之前 回复
ren5333800
ren5333800 老师,如果按| 分组 通过张四 ,来删除 那行 李四的信息 ,老师可以教教我吗
大约 3 年之前 回复
ren5333800
ren5333800 s2=s1.toList(); 是什么意思 老师没交过List,我的理解就是 把刚刚那个读取数组的内容 转变为List数组
大约 3 年之前 回复
wsh1992o
wsh1992o List<string> s2 = new List<string>();那边少了一点东西
大约 3 年之前 回复
albertbush
albertbush   2015.05.27 12:53
  • 一点一点来
  • 1.读文件怎么弄,先自己写个样子出来
  • 2.数组里删除一个数据怎么弄,
  • 3.写文件怎么弄
  • 1+2+3,你的程序就出来了
yangbo50304
yangbo50304   2015.05.27 13:36

给你一段我手写的代码:

    private void DeleteTxt(string filePath, string modifyName)
    {
        List<string> listContent = new List<string>();
        try
        {
            using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite))
            {
                StreamReader sr = new StreamReader(fs, Encoding.Unicode);
                while (!sr.EndOfStream)
                {
                    string strLine = sr.ReadLine();
                    if (!strLine.Contains(modifyName))
                    {
                        listContent.Add(strLine);
                    }
                }
                sr.Close();
            }
            using (FileStream fs = new FileStream(filePath, FileMode.Truncate, FileAccess.ReadWrite))
            {
                StreamWriter sw = new StreamWriter(fs, Encoding.Unicode);
                foreach (string strline in listContent)
                {
                    sw.WriteLine(strline);
                }

                sw.Flush();
                sw.Close();
            }
        }
        catch (System.Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
yangbo50304
yangbo50304 回复ren5333800: 调用方法DeleteTxt("F:\\11.txt", "张四");
大约 3 年之前 回复
ren5333800
ren5333800 老师,你好像有个问题 :你应该把原文件内容清楚
大约 3 年之前 回复
ren5333800
ren5333800 老师,if (!strLine.Contains(modifyName)) 这是什么意思
大约 3 年之前 回复
yangbo50304
yangbo50304   2015.05.27 13:41

注意上面的你的11.txt一定要保存为unicode格式的文件。否则你读取的就是乱码喽!!!!!

caozhy
caozhy   Ds   Rxr 2015.05.27 14:07

没那么麻烦:

 string[] lines = File.ReadAllLines("f:\\11.txt");
var result = lines.Where(x => x != "张四|软件学院|1439同学");
File.WriteAllLines("f:\\11.txt", result);
ren5333800
ren5333800 大师兄 可以详细点嘛 var result = lines.Where(x => x != "张四|软件学院|1439同学"); ,俺代码有点不懂,大概按|分组
大约 3 年之前 回复
ren5333800
ren5333800 大师兄 可以详细点嘛 var result = lines.Where(x => x != "张四|软件学院|1439同学"); ,俺代码有点不懂,大概按|分组
大约 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2015.05.27 14:08

再多教你一些

删除全部李四的记录:

 string[] lines = File.ReadAllLines("f:\\11.txt");
var result = lines.Where(x => x。Split('|')[0] != "李四");
File.WriteAllLines("f:\\11.txt", result);
ren5333800
ren5333800 谢谢
大约 3 年之前 回复
showbo
showbo   Ds   Rxr 2015.05.27 14:08

干嘛不存数据库里面?

不行直接File读出所有内容直接replace下再写回
导入下面2个类
using System.Text;
using System.IO;


    /// <summary>
    /// 
    /// </summary>
    /// <param name="path">文件路径</param>
    /// <param name="str">要删除的内容</param>
    /// <param name="encoding">文件编码</param>
    public void DelStr(string path, string str,Encoding encoding)
    {
        string s = File.ReadAllText(path, encoding);
        s = s.Replace(str, "");
        File.WriteAllText(path, s, encoding);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        DelStr("F:\\11.txt","张四|软件学院|1439同学",Encoding.GetEncoding(936));//注意编码,如果是utf-8最后一个要改为Encoding.UTF8,要不会乱码
    }
showbo
showbo 回复ren5333800: 就是替换传入的内容啊。替换完在写回txt文件中
大约 3 年之前 回复
ren5333800
ren5333800 老师 s = s.Replace(str, ""); 是什么意思,.Replace 不是替换的意思嘛
大约 3 年之前 回复
ren5333800
ren5333800 老师 s = s.Replace(str, ""); 是什么意思,.Replace 不是替换的意思嘛
大约 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2015.05.27 14:09

再多教你一些

删除全部李四的记录:

string[] lines = File.ReadAllLines("f:\\11.txt");
var result = lines.Where(x => x.Split('|')[0] != "李四");
File.WriteAllLines("f:\\11.txt", result);

注意哦,使用这些代码,先要加上

 using System.IO;
ren5333800
ren5333800 老师 var result = lines.Where(x => x.Split('|')[0] != "李四"); 这行 我大概知道是用| 来分组,望老师 能够详细讲解下
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!