扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
给你一段VB.net读取csv文件的代码把。
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的临泉网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
Imports System.IO
Imports System.Collections.Generic
Module Module1
Public CSV数据 As List(Of List(Of String))
''' summary
''' 从指定路径的文件读取内容,并分析出其中每行含有分隔符的数据,存到CSV数据中。
''' para调用的时候使用CSV数据(5)(0)表示第6条记录的第1个数据/para
''' /summary
''' param name="文件路径"必需。一个[String]表达式。要读取的文件路径。/param
''' returns返回是否读取成功/returns
''' remarks/remarks
Public Function 读取(ByVal 文件路径 As String) As Boolean
Dim 文件读取器 As StreamReader = New StreamReader(文件路径)
Dim 语句 As String
Dim t成功 As Boolean = True
Dim 分隔符 As Char = ";"
CSV数据 = New List(Of List(Of String))
While Not 文件读取器.EndOfStream
Try
语句 = 文件读取器.ReadLine
'分析语句后判断类型
If 语句.Contains(分隔符) Then
Dim array = 语句.Split(分隔符)
If array IsNot Nothing Then
CSV数据.Add(array.ToList())
End If
End If
Catch ex As Exception
t成功 = False
End Try
End While
Return t成功
End Function
End Module
你上面的数据执行后,将会保存到一个List嵌套List的String组中。
自己转化为数字再进行操作把。
Dim 数字 = Convert.ToDecimal(CSV数据(5)(0))
CSV文件特征是每行一条记录,字段用逗号分开。你只需要逐行处理,将每行文本用逗号切分得到数组array,然后判断array[0]是否等于"bbb",如果相等则array[1]就是”4561234567890“;如果不等则继续处理下一行。
没怎么用过VB,下面给出C#代码:
string FindString(string filename, string title){ FileStream stream = null; try { stream = File.OpenRead(filename); StreamReader reader = new StreamReader(stream, Encoding.Default);
string result = null;//存储查找的结果 while (!reader.EndOfStream) { //读取一行 string strLine = reader.ReadLine(); string[] array = strLine.Split(','); if (array == null || array.Length 1)//该行无效 continue; if (string.Compare(array[0], title, false) == 0) {//找到了 return array[1]; } } } catch (Exception ex) { //出错了 return null; } finally { if (stream != null) stream.Close(); }
//到这里说明没找到 return null;}void Test(){ string result = FindString(@"C:\demo.csv", "bbb");}
CSV文件,在EXCEL里可以直接生成与读取。
可以通过VB.net去操作,打开EXCEL文件,去完成上述操作,而更为简单的办法是直接当做操作文本文件(TXT文件)就可以,因为用记事本软件,打开CSV文可以发现,其实际上是一个行内数据之间用逗号分隔的格式文件。
下面给出例子:
在窗体上添加两个多行文本框,两个按钮,两个文本框一个用来输入生成CSV文件的数据,另一个用来读取显示CSV文件的数据;两个按钮,一个完成生成CSV文件的代码,另一个完成读取CSV文件的代码;具体代码如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'创建(写入)一个文本文件
Dim MyStream As New System.IO.FileStream(Application.StartupPath "\Ssk.CSV", System.IO.FileMode.Create)
Dim MyWriter As New System.IO.StreamWriter(MyStream, System.Text.Encoding.Default)
MyWriter.WriteLine(TextBox1.Text)
MyWriter.Flush()
MyWriter.Close()
MyStream.Close()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'读取一个文本文件
Dim MyReader As New System.IO.StreamReader(Application.StartupPath "\Ssk.CSV", System.Text.Encoding.UTF8)
TextBox2.Text = MyReader.ReadToEnd()
MyReader.Close()
End Sub
注意:在输入文本框里,同一行数据的数据之间用逗号(西文逗号)分隔。
用一个streamreader和streamwriter即可
Using sr2 As New StreamWriter("2.csv", False, Text.Encoding.Default) '要写入的文件
Using sr1 As New StreamReader("1.csv", Text.Encoding.Default) '要读取的文件
While Not sr1.EndOfStream 'EndOfStream=True表示读取结束了
'读取
Dim lineread As String = "" '等下要读的行
Dim linewrite As String = "" '等下要写入的行
Dim data As String() '每个数据的数组
lineread = sr1.ReadLine '读一行并把流的位置往后调一行
'你现在可以用If判断这一行要不要删除。如果要的话,用Else直接跳过下面的语句即可。
data = lineread.Split(",".ToCharArray, StringSplitOptions.RemoveEmptyEntries) '读取一行,用逗号分隔后存在数组里
'下面对读取到的数据进行处理,你可以自己处理它
For Each item As String In data
linewrite = item "," 'csv是以逗号分隔的,我们写进去时也要记得加逗号
Next
'写入
If linewrite.EndsWith(",") Then '去掉行最后一个逗号。
'如果之前读到一个空行,这里就不会执行。你想想为什么
sr2.WriteLine(linewrite.Remove(linewrite.Length - 1, 1))
End If
'如果你之前用If判断了行要不要删除,那么End If就应该加在这里。
End While
sr1.Close()
End Using
sr2.Flush()
sr2.Close()
End Using
将解析出来的结果写入到
Excel。
解析csv文件代码:
public static List readCsvFile(String argPath) throws FileNotFoundException, IOException {
CsvFileUtil util = new CsvFileUtil();
File cvsFile = new File(argPath);
List list = new ArrayList();
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try {
fileReader = new FileReader(cvsFile);
bufferedReader = new BufferedReader(fileReader);
String regExp = util.getRegExp();
System.out.println(regExp);
String strLine = "";
String str = "";
while ((strLine = bufferedReader.readLine()) != null) {
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(strLine);
List listTemp = new ArrayList();
while(matcher.find()) {
str = matcher.group();
str = str.trim();
if (str.endsWith(",")){
str = str.substring(0, str.length()-1);
str = str.trim();
}
if (str.startsWith("\"") str.endsWith("\"")) {
str = str.substring(1, str.length()-1);
if (util.isExisted("\"\"", str)) {
str = str.replaceAll("\"\"", "\"");
}
}
if (!"".equals(str)) {
//test
System.out.print(str+" : ");
listTemp.add(str);
}
}
System.out.println();
list.add((String[]) listTemp.toArray(new String[listTemp.size()]));
}
} catch (FileNotFoundException e) {
throw e;
} catch (IOException e) {
throw e;
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
if (fileReader != null) {
fileReader.close();
}
} catch (IOException e) {
throw e;
}
}
return list;
}
写入Excel代码:
public void exportExcel(String title, String[] headers,
CollectionT dataset, OutputStream out, String pattern) {
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个表格
HSSFSheet sheet = workbook.createSheet(title);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 15);
// 生成一个样式
HSSFCellStyle style = workbook.createCellStyle();
// 设置这些样式
style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 生成一个字体
HSSFFont font = workbook.createFont();
font.setColor(HSSFColor.VIOLET.index);
font.setFontHeightInPoints((short) 12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style.setFont(font);
// 生成并设置另一个样式
HSSFCellStyle style2 = workbook.createCellStyle();
style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成另一个字体
HSSFFont font2 = workbook.createFont();
font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
// 把字体应用到当前的样式
style2.setFont(font2);
// 声明一个画图的顶级管理器
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
// 定义注释的大小和位置,详见文档
HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));
// 设置注释内容
comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));
// 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.
comment.setAuthor("leno");
//产生表格标题行
HSSFRow row = sheet.createRow(0);
for (short i = 0; i headers.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
//遍历集合数据,产生数据行
HSSFFont font3 = workbook.createFont();
font3.setColor(HSSFColor.BLUE.index);
IteratorT it = dataset.iterator();
int index = 0;
while (it.hasNext()) {
index++;
row = sheet.createRow(index);
T t = (T) it.next();
//利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
Field[] fields = t.getClass().getDeclaredFields();
for (short i = 0; i fields.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style2);
Field field = fields[i];
String fieldName = field.getName();
String getMethodName = "get"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
try {
Class tCls = t.getClass();
Method getMethod = tCls.getMethod(getMethodName,new Class[] {});
Object value = getMethod.invoke(t, new Object[] {});
//判断值的类型后进行强制类型转换
String textValue = null;
//其它数据类型都当作字符串简单处理
textValue = value.toString();
System.out.println(getMethodName+" : "+textValue+" : "+getMethod+" : "+value);
//如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成
if(textValue!=null){
Pattern p = Pattern.compile("^\\d+(\\.\\d+)?$");
Matcher matcher = p.matcher(textValue);
if(matcher.matches()){
//是数字当作double处理
cell.setCellValue(Double.parseDouble(textValue));
}
else{
HSSFRichTextString richString = new HSSFRichTextString(textValue);
richString.applyFont(font3);
cell.setCellValue(richString);
}
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} finally {
//清理资源
}
}
}
try {
workbook.write(out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
你csv文件是用什么分割符的?
把csv文件当做文本文件处理
File.ReadAllLines 读取所有行,
然后循环每行,按照分隔符split后就是每一列
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流