我想逐行使用streamreader readline时遇到问题。我使用的流阅读器是通过获取子字符串来实现的,但是当涉及到空行时,它会弹出此错误消息“索引和长度必须引用字符串中的位置”。它不是完全为空的行或行,而是包含“ÐôÐ#(ôd”)这个东西。如何跳过或忽略或删除文本文件中没有适当行的行?这是我的代码
erlang:system_info(wordsize)
答案 0 :(得分:0)
尝试一下
Dim line As String = reader.ReadLine
If(String.ISNullorWhiteSpace(line) = false Then
Dim datetimestring As String = line.Substring(0, 22)
datetimestring = datetimestring.Replace("""", "").Trim()
datetimestring = datetimestring.Replace("-", "").Trim()
Dim format As String = "dd/MM/yyyy hh:mm:ss tt"
Dim time As DateTime = DateTime.Parse(datetimestring)
Dim Dt = time.ToString(format)
'Dim dtime As DateTime = DateTime.Parse(Dt)
Dim c As String = line.Substring(22)
c = c.Replace("-", "").Trim()
Dim cmd1 As New SqlCommand("insert into table5([time] , [process], [oven], [line]) values ( @line , @line1, '" & oven & "', '" & row2 & "')", con1)
cmd1.Parameters.Add("@line", SqlDbType.DateTime).Value = time
cmd1.Parameters.Add("@line1", SqlDbType.NVarChar).Value = c
con1.Open()
cmd1.ExecuteNonQuery()
con1.Close()
row2 = row2 + 1
End If
如果出现line.Substring,请检查类似这样的内容
Dim lineLength As Int = line.Length()
Dim datetimestring As String =If(line.Substring(0, 22) = Null, "", ine.Substring(0, 22))
Dim datetimestring As String =If(lineLength < 22, "", line.Substring(0, 22))
答案 1 :(得分:0)
我不会使用SubString函数,正如您指出的那样,当一行少于22个字符时,程序将崩溃。 通常,我将使用“拆分”功能将线细分或拆分为不同的部分,例如:
dim ast() as string = line.split("XXX")
然后从中提取特定的字符串:
datetimestring = ast(0)
当然,这要求零件之间用通用的定界符(例如','或空格等)分隔。
此外,在读完该行之后,请添加其他条件,例如:
Dim line As String = reader.ReadLine
If String.ISNullorWhiteSpace(line) orelse line.length < 10 Then continue do
答案 2 :(得分:0)
Do Until reader.EndOfStream
Dim line As String = reader.ReadLine
If Not String.IsNullOrWhiteSpace(line) AndAlso Not line.Length < 22 Then
'put the rest of your do-loop code here
End If
Loop