【问题标题】:How to search specific strings in a text file and modify them如何在文本文件中搜索特定字符串并修改它们
【发布时间】:2017-11-03 17:56:16
【问题描述】:

我一直在尝试导入一个文本文件,确切地说是 .po 格式,其中包含常规文本。

[文字示例]

#: C:\Users\andrei\Desktop\sitemile_themes\ProjectTheme/archive-project.php:69
#: C:\Users\andrei\Desktop\sitemile_themes\ProjectTheme/taxonomy.php:108 msgstr "所有已发布的项目"
msgstr "Все запросы"

#: C:\Users\andrei\Desktop\sitemile_themes\ProjectTheme/archive-project.php:70
#: C:\Users\andrei\Desktop\sitemile_themes\ProjectTheme/taxonomy.php:109 #, php 格式
msgstr "%s 中最新发布的项目"
msgstr "Последние запросы в %s"

导入后,我需要检查导入的文本并找到以 msgid "example" 和 msgstr "example 2" 开头的字符串,然后将它们导入到一个有 2 列的 listview1 中,因为 msgid 是一个项目,而 msgstr 是子项,导入后如下所示。

[示例列表视图1]

Column One  |  Column Two
Example     |  Example 2
--------------------------

并导入'msgid'和'msgstr'下引号中的每个字符串 我将文本导入 vb.net 表单没有问题,但我似乎无法通过导入的文本并提取“msgid "example"' 和 'msgstr "example 2"' 字符串。任何人都知道如何实现这一目标?

编辑:对不起,我忘了显示我当前尝试使用的代码! 要导入文件,我使用此代码

       Dim fileReader As System.IO.StreamReader
        fileReader =
My.Computer.FileSystem.OpenTextFileReader("C:\Users\pasha\Desktop\en_US.po")
        Dim stringReader As String
        stringReader = fileReader.ReadToEnd()
        TextBox1.Text = stringReader

这没问题,但由于某种原因,它把它放在我的文本框中(启用多行)作为一个整体,忽略原始文本文件的行。

对于扫描字符串,我使用

 For Each line In TextBox1.Text
    If line.ToString.Contains("msgid") Then
        ListView1.Items.Add(line.ToString.Replace("msgid ", ""))
    End If
Next

但由于某种原因,这段代码甚至没有添加它找到的任何一行,我认为它甚至根本找不到任何东西。对不起,新手编码,我对这一切都很陌生。

【问题讨论】:

  • 没有任何代码很难提供帮助。如果你只是想让我们为你写代码,那你就来错地方了。阅读How to Ask 并获取tour
  • 嗯,你做了什么不工作?你努力的一个例子是获得答案的好方法
  • 对不起!我已经编辑了帖子并包含了我当前使用的代码。
  • 请阅读How to Ask 并使用tour。 UI 控件会产生可怕的变量。 File.ReadAllLines() 是您加载数据所需的全部内容。第二个 sn-p 中的过滤只是寻找一行是否包含字符串,而不是 STARTSWITH,因为帖子表明

标签: string vb.net text import


【解决方案1】:

这将假定您总是同时拥有“msgid”和“msgstr”。你也可以通过检查第一个“走得慢一点,这样如果你有多余的空间,它不会影响结果。如果它总是这样,那么你可以这样使用它。

        Dim fileReader As System.IO.StreamReader
        fileReader = My.Computer.FileSystem.OpenTextFileReader("C:\dump\test.po")
        Dim stringReader As String = ""
        stringReader = fileReader.ReadToEnd()
        Dim msgList As New List(Of KeyValuePair(Of String, String))
        Do Until InStr(stringReader.ToLower, "msgid") = 0
            Dim xmsgid As String = ""
            Dim xmsgstr As String = ""
            stringReader = Strings.Mid(stringReader, InStr(stringReader.ToLower, "msgid") + 7)
            xmsgid = Strings.Left(stringReader, InStr(stringReader, Chr(34)) - 1)
            stringReader = Strings.Mid(stringReader, InStr(stringReader.ToLower, "msgstr") + 8)
            xmsgstr = Strings.Left(stringReader, InStr(stringReader, Chr(34)) - 1)
            msgList.Add(New KeyValuePair(Of String, String)(xmsgid, xmsgstr))
        Loop

在字符串中走得更慢,但至少你看到了这个概念。

        Dim fileReader As System.IO.StreamReader
        fileReader =
        My.Computer.FileSystem.OpenTextFileReader("C:\dump\test.po")
        Dim stringReader As String = ""
        stringReader = fileReader.ReadToEnd()
        Dim msgList As New List(Of KeyValuePair(Of String, String))
        Do Until InStr(stringReader.ToLower, "msgid") = 0
            Dim xmsgid As String = ""
            Dim xmsgstr As String = ""
            stringReader = Strings.Mid(stringReader, InStr(stringReader.ToLower, "msgid"))
            stringReader = Strings.Mid(stringReader, InStr(stringReader.ToLower, Chr(34)) + 1)
            xmsgid = Strings.Left(stringReader, InStr(stringReader, Chr(34)) - 1)
            stringReader = Strings.Mid(stringReader, InStr(stringReader.ToLower, "msgstr"))
            stringReader = Strings.Mid(stringReader, InStr(stringReader.ToLower, Chr(34)) + 1)
            xmsgstr = Strings.Left(stringReader, InStr(stringReader, Chr(34)) - 1)
            msgList.Add(New KeyValuePair(Of String, String)(xmsgid, xmsgstr))
        Loop

【讨论】:

    猜你喜欢
    • 2016-10-28
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 2012-09-28
    相关资源
    最近更新 更多