Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3598|回复: 19

[已解决]谢谢放浪形骸 老师,文字处理

[复制链接]
发表于 2011-4-2 17:31 | 显示全部楼层 |阅读模式
本帖最后由 lhj323323 于 2011-4-3 03:03 编辑

老师:
上传的附件中有详细的需求,请看看如何写程序,谢谢了。

上传的附件中的TXT文档是数据源,不是我想要的结果表样式,将TXT上传,只是想表明这样的格式擞 据的存在。

是否在外部数据的TXT中被误断句的地方存在我们肉眼看不到的符号,能否从这个思路中将这些看不到的符号替换掉,从而达到把误断句的地方重新相连的目的?

最佳答案
2011-4-2 23:40
本帖最后由 放浪形骸 于 2011-4-2 23:43 编辑
lhj323323 发表于 2011-4-2 23:13
回复 放浪形骸 的帖子

这是我到处找的关于对外部数据TXT文档提取的语句:


这个只是单纯地读入数据。
而且也不是一行一行地读的
我来改改吧。
  1. Private Sub CommandButton1_Click()
  2. Dim strLine As String
  3. Dim txtFile As String
  4. Dim txtOut As String
  5. Dim cChar As String * 1
  6. Application.DisplayAlerts = False
  7. txtFile = ThisWorkbook.Path & "\王守仁心学觅踪.txt"
  8. txtOut = ThisWorkbook.Path & "\OutPut.txt"
  9. Open txtFile For Input As #1
  10. Open txtOut For Output As #2
  11. Do Until EOF(1)

  12. Line Input #1, strLine
  13. cChar = Right(strLine, 1)
  14. Select Case cChar
  15.     Case ":", "。", "!", "”", ")":
  16.         Print #2, strLine & vbCrLf
  17.     Case Else:
  18.         Print #2, strLine;
  19. End Select
  20. Loop
  21. Close #1
  22. Close #2
  23. Application.DisplayAlerts = True
  24. End Sub

复制代码
把原文件和EXCEL文件放在同一个文件夹里。

但是这里还是有一个问题:
也就是每个篇章的标题它不会自动识别。
也就是最开始一段会是这样的结果:
良知的呼唤一、向内心开拓的成圣之路 1.少有凌云志 一心成圣贤 京城,一个深深的宅院里,一丛挺拔的翠竹前,只见一位青年正对着竹子凝神静思。这几天,他每天一早就来到这里做这个“功夫”,整整是第七天了。看他那专心致志的样子,像是非要从这不会说话的竹子中体悟出什么深奥动人的道理一样。这就是我们的“主人公”王守仁。

合并硬断文档.rar

181.85 KB, 下载次数: 19

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-4-2 19:54 | 显示全部楼层
回复

使用道具 举报

发表于 2011-4-2 20:12 | 显示全部楼层
我刚想到一个方法,刚才把文本的长度看了下。有点眉目了,口述下方法:
  1. line input每行的文本,读取其大小,若len,长度为33,则去掉这行末尾的回车。
复制代码
但是这里存在一个问题:
1、里面如果全是中文和全角符号的话,成立。
2、里面存在数字的话,每行的文字长度会有所超出。
3、每段的行首的两个空格在原文本里已经被自动去掉,所以行首的文字长度仅为31。需要另行判断。
回复

使用道具 举报

 楼主| 发表于 2011-4-2 22:20 | 显示全部楼层
回复 放浪形骸 的帖子

可我不知怎么写,还有您说的这个长度的判断方法也不错,我还在想,是否因为是TXT格式,它里面是不是有我们肉眼看不到的比如回车符之类的符号,再用替换的方法来做

回复

使用道具 举报

发表于 2011-4-2 22:35 | 显示全部楼层
lhj323323 发表于 2011-4-2 22:20
回复 放浪形骸 的帖子

可我不知怎么写,还有您说的这个长度的判断方法也不错,我还在想,是否因为是TXT格式 ...

好像我看了下回车都是硬回车。
应该是在截取的时候就已经是这样了。
没有留有什么其他的不可见字符。
回复

使用道具 举报

 楼主| 发表于 2011-4-2 22:48 | 显示全部楼层
回复 放浪形骸 的帖子

那能否把凡是每一行最后一个字不带标点符号的都算成是被“硬断句”的,
然后把符合这样条件的上下两句连在一起?
如这样可行的话,那又该怎么写程序呢?
回复

使用道具 举报

发表于 2011-4-2 22:53 | 显示全部楼层
lhj323323 发表于 2011-4-2 22:48
回复 放浪形骸 的帖子

那能否把凡是每一行最后一个字不带标点符号的都算成是被“硬断句”的,

那你要对每行读取的文本strLine进行判断
right(strLine,1),这样就可以获得最后一个字符。
然后我看了一下:一般最后一个字符是“。”、“:”、“””、“?”的话,可以是段落的末尾。
那么思路就是:
逐行读取,获取最后一个字符,若为上述几个标点,则添加回车,否则继续以&合并。
回复

使用道具 举报

发表于 2011-4-2 22:54 | 显示全部楼层
本帖最后由 djyjysxxs 于 2011-4-2 23:11 编辑

回复

使用道具 举报

发表于 2011-4-2 23:02 | 显示全部楼层
djyjysxxs 发表于 2011-4-2 22:54
从你的数据源表来看,需要将连续的行连成一行。两行是否连接(即不是另一段的开始)可按我们国人的习惯:一 ...

冒号有的,比如说:
山崖上刻着如下的诗句:
天若有情天亦老,人间正道是沧桑
回复

使用道具 举报

 楼主| 发表于 2011-4-2 23:13 | 显示全部楼层
回复 放浪形骸 的帖子

这是我到处找的关于对外部数据TXT文档提取的语句:
Private Sub CommandButton1_Click()
    Application.DisplayAlerts = False
    f = Dir(ThisWorkbook.Path & "\*.txt")
    Do While f > " "
        Workbooks.Add
        With Workbooks(Workbooks.Count)
            .SaveAs ThisWorkbook.Path & "\" & Left(f, Len(f) - 3) & "xls"
            ThisWorkbook.Sheets("Sheet1").Cells.Copy .Sheets("sheet1").[a1]
            Open ThisWorkbook.Path & "\" & f For Input As #1 ' 打开输入文件。
            ar = [b3:d6]
            Line Input #1, a
            .Sheets("sheet1").[d2] = a
            Input #1, ar(1, 1), ar(1, 3), ar(2, 1), ar(2, 3), ar(3, 1), ar(3, 3), ar(4, 1) ' 将数据读入变量。
            .Sheets("sheet1").[b3:d6] = ar
            Close #1    ' 关闭文件。
            .Close 1
        End With
        f = Dir
    Loop
    Application.DisplayAlerts = True
End Sub

确实不会将您们刚才说的具体语句融入其中,请问,如具体成上面这样的句子,如何写呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-23 11:08 , Processed in 0.295613 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表