在 VB.net 中将竖线分隔文件更改为逗号分隔

2024-03-11

所以我有一组管道分隔的输入,如下所示:

“787291 | 3224325523” | 37826427 | 37826427 2482472 | 2482472 “46284729|46246”| 24682 | 82524 | 6846419 | 68247

我使用下面给出的代码将它们转换为逗号分隔:

 Dim line As String
    Dim fields As String()
    Using sw As New StreamWriter("c:\test\output.txt")
        Using tfp As New FileIO.TextFieldParser("c:\test\test.txt")
            tfp.TextFieldType = FileIO.FieldType.Delimited
            tfp.Delimiters = New String() {"|"}
            tfp.HasFieldsEnclosedInQuotes = True
            While Not tfp.EndOfData
                fields = tfp.ReadFields
                line = String.Join(",", fields)
                sw.WriteLine(line)
            End While
        End Using
    End Using

到目前为止,一切都很好。它仅考虑引号之外的分隔符并将其更改为逗号分隔符。但是当我输入如下所示的杂散引用时,麻烦就开始了:

“787291 | 3224325523” | 37826427 | 37826427 2482472 | 2482472 “46284729|46246”| 24682 |"82524| 6846419 | 68247

这里的代码给出了

畸形线异常

我意识到这是由于我的输入中的杂散引用造成的,而且因为我就像正则表达式中的菜鸟,所以我无法在这里使用它(或者我无法)。如果有人有任何想法,将不胜感激。


这是评论中描述的编码过程:

  • 读取原始输入文件的所有行,
  • 修复错误的行(使用正则表达式或任何其他合适的东西),
  • use TextFieldParser执行正确输入的解析
  • Join()创建的输入部分TextFieldParser using ,作为分隔符
  • 将固定的、重建的输入行保存到最终的输出文件中

我在用着维克托·斯特里比热夫 https://stackoverflow.com/questions/53883750/changing-a-pipe-delimited-file-to-comma-delimited-in-vb-net#comment94614029_53883750正则表达式模式:根据问题的描述,它看起来应该可以工作。

Note:
当然我不知道是否应该使用特定的编码。
在这里,编码是默认的 https://learn.microsoft.com/en-us/dotnet/api/system.io.file.writealllines?view=netframework-4.7.2#System_IO_File_WriteAllLines_System_String_System_String___ UTF-8 no-BOM, 进进出出。

"FaultyInput.txt" is the 损坏的源文件。
"FixedInput.txt"是包含由正则表达式(希望)修复的输入行的文件。您还可以使用MemoryStream.
"FixedOutput.txt"是最后的CSV文件,包含逗号分隔的字段和正确的值。

这些文件都是在可执行启动路径中读取/写入的。

Dim input As List(Of String) = File.ReadAllLines("FaultyInput.txt").ToList()
For line As Integer = 0 To input.Count - 1
    input(line) = Regex.Replace(input(line), "(""\b.*?\b"")|""", "$1")
Next

File.WriteAllLines("FixedInput.txt", input)

Dim output As List(Of String) = New List(Of String)
Using tfp As New FileIO.TextFieldParser("FixedInput.txt")
    tfp.TextFieldType = FileIO.FieldType.Delimited
    tfp.Delimiters = New String() {"|"}
    tfp.HasFieldsEnclosedInQuotes = True
    While Not tfp.EndOfData
        Dim fields As String() = tfp.ReadFields
        output.Add(String.Join(",", fields))
    End While
End Using

File.WriteAllLines("FixedOutput.txt", output)
'Eventually...
'File.Delete("FixedInput.txt")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 VB.net 中将竖线分隔文件更改为逗号分隔 的相关文章

随机推荐

  • 在 Mac OS 下设置 COBOL 编译器?

    在我的大学里 我们正在学习 COBOL 我正努力在明年上课之前抢先学习 COBOL C 和 Java 问题是 COBOL 是so旧的 很难在 mac 中获得对它的支持 我的笔记本电脑是 mac 我知道它在 Mac 上运行良好 但找到可以解释
  • 如何以全屏模式启动 NSWindow

    我正在 Xcode 5 中为 Macos 开发一个应用程序 我想全屏显示我的第一个窗口 没有工具栏 只有我的视图 我找到了一种在角落显示全屏按钮的方法 AppDelegate m void applicationDidFinishLaunc
  • BCL(基类库)与 FCL(框架类库)

    两者有什么区别 我们可以互换使用它们吗 基类库 BCL 字面意思就是基础 它包含基本的基本类型 例如System String and System DateTime 框架类库 FCL 是更广泛的库 包含全部内容 ASP NET WinFo
  • 使用 docker-compose 时无法连接到 postgres

    我是 docker 的新手 仍在学习如何使用它 我正在尝试使用 docker compose 一起运行 Django 和 Postgres 它们运行完美 迁移完成 一切顺利 但我有一个问题 无法使用 pgAdmin4 连接到数据库来查看数据
  • C# 序列化到文件,如果存在则覆盖

    我有以下方法 如下 您可以看到它将对象序列化为 XML 文件 我遇到的主要问题是我想获得覆盖文件 如果存在 的函数 我知道如果该文件确实存在 我可以先删除该文件 但这也意味着我可能会导致一些错误拖入我的应用程序 所以我想要一个全有或全无的覆
  • volley 磁盘缓存内存不足问题

    在我的 Android 应用程序中 我使用 Volley 在自定义列表视图中加载图像 当我多次刷新 删除所有项目并加载 tiem 列表视图时 我的应用程序被这条消息杀死 我该如何修复它 04 26 13 08 01 038 E dalvik
  • tmux:挂起并且不加载,并且不响应任何选项命令

    我已经在 Fedora 的本地空间上从源代码安装了 tmux 到目前为止 它运行良好 但突然无法再运行它 当运行 tmux 时 它就停止了 尝试了不同的命令选项 例如 ls sessions 但没有任何效果 杀死我的用户的所有进程 删除 t
  • maven 编译无法识别我的本地存储库依赖项

    我有一个本地 jar 文件要导入到我的文件夹中 并且我已经运行了 mvn install mvn install install file Dfile C myapp Development core target api core 1 0
  • 如何在启动 iex 会话时执行一些命令?

    假设我想在项目的根路径中启动 iex 时实现一些命令 例如 Logger configure level info require Ecto Query alias MyApp User and so on 我想在每次启动 iex 时自动执
  • SimpUserRegistry 不包含任何会话对象

    我是 Websockets 新手 我一直在尝试使用 SimpUserRegistry 来查找主体的会话对象 我编写了一个自定义握手处理程序 将匿名用户转换为经过身份验证的用户 并且我能够从 Websocket 会话对象访问主体名称 自定义握
  • EWS:日历共享邀请和扩展属性

    好的 到目前为止 我获得的有关该主题的最佳信息是在这个线程上 EWS API 创建日历并与审阅者共享权限 https stackoverflow com questions 7503613 ews api create calendar a
  • PHP + PDF,如何使用curl保存下载的PDF?

    Welcome 我在页面上保存下载的 pdf 时遇到了一些问题 要下载 pdf 我使用 Curl CurlConnect curl init curl setopt CurlConnect CURLOPT URL http website
  • PHP内存限制锁定为256MB?

    我试图将内存限制设置为 512M 但它被锁定为 256M ini set memory limit 512M ini get memory limit gt Returns 256M 我可以完全控制我的服务器 这是专用的 请注意 512M
  • REST WebAPI 接口作为 API 调用中的参数

    我正在使用 ASP NET WebAPI 构建 REST API 一切工作正常 但后来我想到了在所有方法调用中使用接口的好主意 更改所有方法后 我注意到将控制器方法中的参数设置为接口后 我的 API 调用不起作用 我正在使用 OWIN Se
  • 访问类中的会话变量

    当需要检索或保留会话值时 在类构造函数上使用 session start 是否被认为是正常的 最佳实践 除非从 construct 调用 session start 否则无法从类中检索会话变量 session start if isset
  • 在Google云平台上使用FFMPEG

    我将音频文件存储在 Google Cloud Storage 上 通过 Firebase 存储 我需要使用 FFMPEG 将音频文件从立体声 两个通道 转换为单声道 一个通道 如何在 Google Cloud Platform 上进行上述转
  • java.io.IOException:不支持标记/重置

    我知道这个问题已经被问过很多次了 但在某些情况下有所不同 所以我无法弄清楚 当我在 Eclipse 中运行游戏时 一切都很顺利 游戏运行完美 但在导出后 它崩溃了 我可以打开游戏并在菜单中移动 但没有播放任何声音 并且在我点击播放后 游戏就
  • 查找数组中第一个非零值索引

    我有一个数组数组 0 0 0 0 3 2 5 6 15 9 0 0 7 23 我可以用类似的东西 indexOf 0 如果我想找到第一个零值索引 但是如何找到第一个非零值的索引或符合某些条件的索引 它可能看起来像 indexOf funct
  • 从 contentViewController 中解除 UIPopoverController?

    如果您想关闭弹出窗口 例如 从弹出窗口的 contentViewController 中的按钮 您必须 创建对弹出窗口的引用 该引用由创建它的视图控制器保存 从 contentViewController 创建一个通知 让所属视图控制器知道
  • 在 VB.net 中将竖线分隔文件更改为逗号分隔

    所以我有一组管道分隔的输入 如下所示 787291 3224325523 37826427 37826427 2482472 2482472 46284729 46246 24682 82524 6846419 68247 我使用下面给出的