Извините, очень случайный программист, не программировался много лет .. (в основном в VB6)
Я гуглил и читал .net детали по каждому классу файлов, видел много примеров, но не знаю, как получить модифицированный вывод для соответствия форматированию исходного кода.
У меня есть существующий файл: (это 2 строки файла: заголовок и 1 деталь)
"BATCHNBR","JOURNALID","TRANSNBR","DESCOMP","ROUTE","ACCTID","COMPANYID","TRANSAMT","TRANSQTY","SCURNDEC","SCURNAMT","HCURNCODE","RATETYPE","SCURNCODE","RATEDATE","CONVRATE","RATESPREAD","DATEMTCHCD","RATEOPER","TRANSDESC","TRANSREF","TRANSDATE","SRCELDGR","SRCETYPE","COMMENT","VALUES","PROCESSCMD"
"000004","00001","0000000020","",0,"60000000000000000ZZZZZ","GMN",817.31,0,"2",817.31,"USD","SP","USD",20180511,1,0,"1","1","100123","10444-Kampwerth, Brooke E",20180511,"UP","SC","",0,0
У меня есть подполнота, но она выводит каждое поле на отдельной строке и без двойных кавычек. TextFieldParser не имеет методов записи. Врезка msgbox показывает, что я правильно заменил данные,
Я усекаю определенное поле (если требуется), и врезки msgbox указывают, что я правильно заменил данные.
Мне просто нужно вывести в той же строке, что и источник.
Private Sub cmdProcess_Click(sender As Object, e As EventArgs) Handles cmdProcess.Click
Using sw = New IO.StreamWriter(NewFile)
Using MyReader As New FileIO.TextFieldParser(oFile)
MyReader.TextFieldType = FileIO.FieldType.Delimited
MyReader.SetDelimiters(",")
'MyReader.HasFieldsEnclosedInQuotes
'Dim Expression As String
Dim Replacement As String
Dim currentRow As String()
While Not MyReader.EndOfData
Try
currentRow = MyReader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
If Strings.Right(currentField, 3) = "ZZZ" Then
'MsgBox(MyReader.LineNumber & " " & currentField)
Replacement = Strings.Left(currentField, 6)
'MsgBox(MyReader.LineNumber & " " & Replacement)
currentField = Replacement
End If
sw.WriteLine(String.Join(",", currentField))
Next
Catch ex As Microsoft.VisualBasic.
FileIO.MalformedLineException
MsgBox("Line " & ex.Message &
"is not valid and will be skipped.")
End Try
End While
End Using
End Using
MsgBox("Done")
Dispose()
Application.Exit()
End Sub
Если я заменю поле current на currentrow в sw.writeline, оно выводит ту же строку 27 раз (27 строк в источнике), затем выполняет следующую строку. И без двойных кавычек вокруг каждого поля.
Токовый выход: (с одним интервалом)
BATCHNBR
JOURNALID
TRANSNBR
DESCOMP
ROUTE
Чего мне не хватает .. ??