在csv表格中修改/追加某行数据
思路:
文本文件不能随意穿插信息,但是通过使用Seek()方法,可以在读取文本文件中移动光标从而修改所要修改的行.
思路步骤:
1、读取文件,打开csv文件,获取文件流,seek移动光标到开始, for循环寻找出字符“\r\n”,运用两个变量锁定要修改的行数
2、第二个变量锁定后,将后面不修改部分保存到缓存区
2、移动到锁定的位置重写改行数据——实现修改该行的目标,然后重新写入缓存区的不变内容。
下面提供覆盖式修改csv文件的示例代码:
/// <summary>
/// 在csv文件某行中覆盖重写
/// </summary>
/// <param name="strFilePath">文件路径</param>
/// <param name="rowNumber">修改的行数(不包含0)</param>
/// <param name="str">覆盖的内容</param>
/// <returns></returns>
public static bool csv_rowWrite(string strFilePath, int rowNumber, string str)
{
try
{
if (!File.Exists(strFilePath))
{
MessageBox.Show("读取的文件不存在!!");
return false;
}
else if (rowNumber <= )
{
MessageBox.Show("该方法不能修改第" + rowNumber + "行");
return false;
}
using (FileStream fs = new FileStream(strFilePath, FileMode.Open))
{
fs.Seek(, SeekOrigin.Begin);
//查找2个换行符位置
//p1定位<修改行的前一个换行符>后一个字节,p2定位<修改行的后一个换行符>后一个字节,用于定位后面的内容缓存到一个缓冲区
long p1 = -, p2 = -;
var last = ;
//记录换行符个数
int rowNum = ;
for (int i = ; i < fs.Length; ++i)
{
if (rowNumber == )
{
p1 = ;
var c = fs.ReadByte();
if (last == '\r' && c == '\n')
{
p2 = fs.Position;
break;
}
last = c;
}
else
{
var c = fs.ReadByte();
if (last == '\r' && c == '\n')
{
rowNum++;
if (rowNum == rowNumber - || rowNum == rowNumber)
{
if (p1 == -)
{
p1 = fs.Position;
}
else
{
p2 = fs.Position;
break;
}
}
}
last = c;
}
}
//未找到行
if (p1 == -)
{
MessageBox.Show("路径文件" + strFilePath + "中,第" + rowNumber + "行不存在数据");
return false;
}
//第二个换行符之后的内容,如果是超大文件,分批缓存,避免内存占用过多
var sr = new StreamReader(fs);
//流的当前位置是p2,保存后半部分不修改的内容到缓存区end
var end = sr.ReadToEnd();
//重新写入第一个标记点之后的内容
fs.Seek(p1, SeekOrigin.Begin);
fs.SetLength(p1);
var sw = new StreamWriter(fs);
sw.WriteLine(str);
sw.Write(end);
sw.Flush();
return true;
} }
catch (Exception ex)
{
MessageBox.Show("异常:\n" + ex.Message);
return false;
}
}
灵活运用光标位置p1,p2可以实现追加内容的效果。
在csv表格中修改/追加某行数据的更多相关文章
- 取SQL分组中的某几行数据
取SQL分组中的某几行数据 对表中数据分组,有时只需要某列的聚合值:有时却需要返回整行数据,常用的方法有:子查询.ROW_NUMBER.APPLY,总体感觉还是ROW_NUMBER比较直观.测试数据: ...
- 使用js方法将table表格中指定列指定行中相同内容的单元格进行合并操作。
前言 使用js方法对html中的table表格进行单元格的行列合并操作. 网上执行此操作的实例方法有很多,但根据实际业务的区别,大多不适用. 所以在网上各位大神写的方法的基础上进行了部分修改以适合自己 ...
- extjs 点击复选框在表格中增加相关信息行
功能效果:点击复选框在表格中自动增加相关信息行,复选框取消则表格中内容自动删除 初始效果大概是这样~~~~~ // 定义初始 存放表格数据 var gridItems = []; //省份复选框 va ...
- 统计mysql库中每张表的行数据
修改数据库配置文件:vim /etc/my.cnf [client] user=username password=password 使用shell脚本统计表中的行数据:count.sh #!/bin ...
- [简单]poi word2007表格按模版样式填充行数据
主要实现了按照模版行的样式填充数据,针对的是动态数据,静态数据可以直接替换变量实现,先说下缺点:1)暂未实现特殊样式填充(如列合并(跨行合并)),只能用于普通样式(如段落间距 缩进 字体 对齐)2)数 ...
- 05. 取SQL分组中的某几行数据
对表中数据分组,有时只需要某列的聚合值:有时却需要返回整行数据,常用的方法有:子查询.ROW_NUMBER.APPLY,总体感觉还是ROW_NUMBER比较直观.测试数据: if OBJECT_ID( ...
- Javaweb项目中修改表单时数据回显方法
1.前言 先来说下什么是数据回显,比如我要修改我的个人信息,点击修改按钮后进入修改界面,在这个界面中直接将原来的信息显示在表单中,而不是空表单,这就是数据回显 2.思路 当点击修改的时候,从数据库中查 ...
- hive中同列多行数据组合的方法以及array to string要点(行转列)
1. 同列多行数据组合成一个字段cell的方法, top N 问题的hive方案 如下: hive 列转行 to json与to array list set等复杂结构,hive topN的提取的窗口 ...
- [JS&Jquery]实现页面表格中相同内容的行或列合并
详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak<script type=&qu ...
随机推荐
- Codeforces_834
A.两个方向都判断. #include<bits/stdc++.h> using namespace std; string s1,s2; map<char,int> mp; ...
- POJ_1042_贪心
题目描述: 每组数据给你n个胡,h小时时间,每个湖一次可钓鱼数量,每个湖每次钓鱼后下次可钓鱼数量的减少量,从每个湖到下一个湖所需时间.求最大钓鱼量. 要注意的是,刚开始在第一个湖,每次移动只能往下一个 ...
- php扩展模块的安装
PHP的扩展模块安装 模块安装总则: 进入到ext/目录下对应的模块 执行/usr/local/php/bin/phpize 也就是执行一遍phpize生成编译文件 ./configure --wit ...
- 使用logstash结合logback收集微服务日志
因为公司开发环境没有装elk,所以每次查看各个微服务的日志只能使用如下命令 这样子访问日志是并不方便,于是想为每个微服务的日志都用logstash收集到一个文件out中,那以后只要输出这个文件则可查看 ...
- 浅谈Go语言的Goroutine和协程
0x00.前言 前面写了一篇初识Go语言和大家一起学习了Go语言的巨大潜力.语言简史.杀手锏特性等,感兴趣的读者可以回顾一下. 今天来学习Go语言的Goroutine机制,这也可能是Go语言最为吸引人 ...
- python 中列表 元组 字典 集合的区别
先看图片解释 (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单.由于我们买一种东西可能不止一次,所以清单中是允许有重复 ...
- Java开发最佳实践(二) ——《Java开发手册》之"异常处理、MySQL 数据库"
二.异常日志 (一) 异常处理 (二) 日志规约 三.单元测试 四.安全规约 五.MySQL数据库 (一) 建表规约 (二) 索引规约 (三) SQL语句 (四) ORM映射 六.工程结构 七.设计规 ...
- Go语言基础之面向对象编程中
1 Golang面向对象编程基本介绍 Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OPP语言不一样,随后分别介绍Golang对面向对象编程的三大特性是如何实现的. 2 ...
- Ajax0001:ajax介绍 JSON数据处理
- Valiant Hearts: The Great War -- 《勇敢的心》
“友情,爱情,亲情”