【问题标题】:Extracting parts of words from a file从文件中提取部分单词
【发布时间】:2013-02-06 20:24:36
【问题描述】:

我有一个列表“列表 A”,其中包含数以万计的条目(下面显示了 4 个示例条目)。我想从“列表 A”创建另一个列表,“列表 B”。我需要“列表 B”的每个条目仅包含“列表 A”中每个条目开头的“>”字符之后的第一个“单词”的前 4 个(共 5 个)字符。

因此,例如,我想要一个如下所示的“列表 B”: 2JUG 3JU9 1JU8 3觉

我是脚本编写的新手,如果您能提供任何帮助,我将不胜感激。我最接近解决我的问题的是打印第一列,但这给了我第一个“单词”的所有 5 个字符,加上下一行中的一长串字母。我是脚本写作的新手,所以如果可能的话,请尽量给我你的解释的“傻瓜”版本。谢谢!

下面“列表 A”中的示例条目

2JUGA 78 NMR NA NA NA 无 TubC 蛋白 [盘状血管球菌] || 2JUGB GPLGSSAGALLAHAASLGVRLWVEGERLRFQAPPGVMTPELQSRLGGARH ELIALLRQLQPSSQGGSLLAPVARNGRL

3JU9A 237 XRAY 2.10 0.207 0.253 无伴刀豆球蛋白-Br [CANAVALIA BRASELIENSIS] || 1AZDA 1AZDB 1AZDC 1AZDD 4H55A ADTIVAVELDTYPNTDIGDPSYPHIGDIKSVRSKKTAKWNMQNGKVGTA HIIYNSVGKRLSAVVSYPNGDSATVSYDVDLDNVLPEWVRVGLSASTGLY KETNTILSWSFTSKLKSNSTHETNALHFMFNQFSKDQKDLILQGDATTGT EGNLRLTRVSSNGSPQGSSVGRALFYAPVHIWESSAVVASFEATFTFLIK SPDSHPADGIAFFISNIDSSIPSGSTGRLLGLFPDAN

1JU8A 37 NMR NA NA NA 没有 Leginsulin [NA] ADCNGACSPFEVPPCRSRDCRCVPIGLFVGFCIHPTG

3JUEA 368 XRAY 2.30 0.203 0.219 无 ARFGAP,带有卷曲螺旋、ANK 重复和含有 PH 结构域的蛋白质 1 [智人] || 3JUEB GPLGSGSGHLAIGSAATLGSGGMARGREPGGVGHVVAQVQSVDGNAQCCD CREPAPEWASINLGVTLCIQCSGIHRSLGVHFSKVRSLTLDSWEPELVKL MCELGNVIINQIYEARVEAMAVKKPGPSCSRQEKEAWIHAKYVEKKFLTK LPEIRGRRGGRGRPRGQPPVPPKPSIRPRPGSLRSKPEPPSELGSLHPG ALLFRASGHPPSLPTMADALAHGADVNWVNGGQDNATPLIQATAANSLLA CEFLLQNGANVNQADSAGRGPLHHATILGHTGLACLFLKRGADLGARDSE GRDPLTIAMETANADIVTLLRLLAKMREAAQGQAGDETYLDIFRDFSLM ASDDPEKLSRRSHDLHTL

【问题讨论】:

  • 您能否提供一个示例文件 - 问题格式破坏了输入,这对于可能的解决方案很重要。
  • 嗨,Peter L. 哇,感谢您的快速回复。我很乐意提供所要求的信息。你有我可以发送示例文件的电子邮件地址吗?
  • P.S.格式是列表中每个条目有 2 行。第一行以“>abcde”开头,“abcd”是我想要的信息。第二行是一长串字母。然后是一个空行,然后是列表中的下一个条目。
  • P.P.S.我不知道这是否有帮助,但我的另一个想法是使用“>”作为我的脚本,但是开始每个条目的“>abcde”的“>”并不是该起始位置所独有的。一些条目还在第一行的后面点包含这个符号(尽管这些“>”符号都没有出现在我发布的原始示例中)。
  • 将文件上传到保管箱或任何类似的文件共享服务并在此处放置链接。如果您没有保管箱 - 从这里安装:db.tt/JNGZy87d

标签: list vba extract ms-word truncate


【解决方案1】:

这是解决方案 - 非常简单,但会在提供输入的情况下完成工作:

Sub NMRData()
    With Selection.Find
        .Text = "^p>"
        .Replacement.Text = "@@@>"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "^p"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "@@@>"
        .Replacement.Text = "^p>"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

    For k = ThisDocument.Paragraphs.Count To 1 Step -1
        Set oPara = ThisDocument.Paragraphs(k)
        oPara.Range.Text = Left(oPara.Range.Text, 5) & vbNewLine
    Next k

    ThisDocument.SaveAs FileName:="listB.docx", FileFormat:=wdFormatXMLDocument

End Sub

所需的输出将保存在与新 DOCX 文件相同的文件夹中。

要运行代码,请按 ALT+F11,然后按 F5 - 通过 VBA 界面,或按 ALT kbd>+F8 按名称选择并运行宏。

带有现成代码的示例 DOCM:https://www.dropbox.com/s/6zt4nfn7rt8eqc7/NMRDataListA.docm

附:这是我的第一次 Word-VBA 体验)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多