设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 5286|回复: 13
打印 上一主题 下一主题

[已经解决] 关于读取txt的问题......

[复制链接]

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21484
在线时间
9389 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

跳转到指定楼层
1
发表于 2014-4-13 18:56:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 喵呜喵5 于 2014-4-17 12:40 编辑

我使用这样一个方法读取文本文件
  1. def read_txt
  2.   File.open("Text.txt", "r") do |file|   
  3.     file.readlines.each do |contents|
  4.       text = contents.chop
  5.       p text
  6.     end
  7.   end
  8. end
复制代码
但是我发现读取的文本中第一行会多出一个空格
求教出现这种情况的原因以及解决方法

Lv1.梦旅人

梦石
0
星屑
65
在线时间
389 小时
注册时间
2009-11-24
帖子
71
2
发表于 2014-4-13 19:44:03 | 只看该作者
本帖最后由 test 于 2014-4-13 19:46 编辑
  1. def read_txt
  2.   File.open("Text.txt", "r") do |file|   
  3.     file.readlines.each do |contents|
  4.       text = contents.chop.gsub("\xEF\xBB\xBF", "")
  5.       p text
  6.     end
  7.   end
  8. end
复制代码
我想改成这样子应该就没有问题了……

评分

参与人数 2星屑 +80 梦石 +1 收起 理由
迷糊的安安 + 1 谢谢
喵呜喵5 + 80 谢谢

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21484
在线时间
9389 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

3
 楼主| 发表于 2014-4-13 20:43:49 | 只看该作者
test 发表于 2014-4-13 19:44
我想改成这样子应该就没有问题了……

谢谢,顺便问一下字符串有没有比较方便的删除某个位置字符的方法
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

4
发表于 2014-4-13 21:10:46 | 只看该作者
本帖最后由 taroxd 于 2014-4-13 21:21 编辑
喵呜喵5 发表于 2014-4-13 20:43
谢谢,顺便问一下字符串有没有比较方便的删除某个位置字符的方法


比如 slice! 之类的?
RUBY 代码复制
  1. =begin
  2. slice!(fixnum) → fixnum or nil
  3. slice!(fixnum, fixnum) → new_str or nil
  4. slice!(range) → new_str or nil
  5. slice!(regexp) → new_str or nil
  6. slice!(other_str) → new_str or nil
  7. Deletes the specified portion from str, and returns the portion deleted.
  8. =end
  9.  
  10. string = "this is a string"
  11. string.slice!(2)        #=> "i"
  12. string.slice!(3..6)     #=> " is "
  13. string.slice!(/s.*t/)   #=> "sa st"
  14. string.slice!("r")      #=> "r"
  15. string                  #=> "thing"


然后顶楼问题我没有重现,不知道是什么情况。我一般是这么写的
RUBY 代码复制
  1. IO.foreach('test.txt') do |line|
  2.   p line.chomp
  3. end

点评

utf8编码txt时出现的  发表于 2014-4-13 23:03

评分

参与人数 2星屑 +80 梦石 +1 收起 理由
迷糊的安安 + 1 谢谢
喵呜喵5 + 80 谢谢,顺便请问如何将读取到的ASCII编码的.

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
389 小时
注册时间
2009-11-24
帖子
71
5
发表于 2014-4-13 22:32:29 | 只看该作者
喵呜喵5 发表于 2014-4-13 20:43
谢谢,顺便问一下字符串有没有比较方便的删除某个位置字符的方法

好象没有,不过可以自己写一个函数。
可以参考我写的这个函数:
参数分别是:字符串、开始的位置、删除的字符数
  1. def str_del(str, start, len)
  2.     sl = str.to_s.length
  3.     start = (start > sl) ? sl : start
  4.     len = (start + len > sl) ? (sl - start) : len
  5.     return str[0...start] + str[start + len...sl]
  6. end

  7. text = "abcdefg"
  8. new_text = str_del(text, 1, 3)
  9. msgbox(new_text) # => "aefg"
复制代码

点评

要删除的字符在开头或是结尾用slice!是很方便,可是,要删除的字符在中间的话,就不那么方便了。  发表于 2014-4-14 20:31
slice!  发表于 2014-4-14 06:27

评分

参与人数 1星屑 +40 收起 理由
喵呜喵5 + 40 谢谢

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
848
在线时间
250 小时
注册时间
2013-10-4
帖子
120
6
发表于 2014-4-13 23:55:39 | 只看该作者
test 发表于 2014-4-13 19:44
我想改成这样子应该就没有问题了……

我新建了个“测试.txt”,复制了上面的代码,修改成File.open(“测试.txt”,"r")运行的时候提示找不到文件,请问,新建的txt要保存在哪里他才能找到

点评

扔到游戏的工程目录下  发表于 2014-4-14 10:47
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

7
发表于 2014-4-14 16:24:12 手机端发表。 | 只看该作者
本帖最后由 taroxd 于 2014-4-14 17:22 编辑

To 4L评分
  1. #encoding: utf-8

  2. IO.foreach('utf8.txt', encoding: 'utf-8') do |line|
  3.   puts line.chomp
  4. end
复制代码
Output:这是一个utf8文件

这样或许还能解决楼主顶楼那个多空格的问题,不过我这里从来没有这个问题所以不敢保证。
然后因为ASCII和UTF8是兼容的,所以把ASCII直接当做UTF8读取应该没什么问题吧…… 这样就自动把ASCII转成UTF8了。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21484
在线时间
9389 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

8
 楼主| 发表于 2014-4-14 18:43:44 | 只看该作者
taroxd 发表于 2014-4-14 16:24
To 4L评分Output:这是一个utf8文件

这样或许还能解决楼主顶楼那个多空格的问题,不过我这里从来没有这个 ...

我这边读取ASCII编码的中文字符时会报错,UTF8的话出现多出来的空格貌似是因为UTF8开头有三个表明编码的字符
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

9
发表于 2014-4-14 20:04:46 | 只看该作者
喵呜喵5 发表于 2014-4-14 18:43
我这边读取ASCII编码的中文字符时会报错,UTF8的话出现多出来的空格貌似是因为UTF8开头有三个表明编码的 ...

1. ASCII哪来的中文字符……
2. 这个我知道,但是我无法重现这个问题。我这边一切正常

点评

windows自带记事本默认的编码  发表于 2014-4-15 17:54
多打了一个I,ANSI编码,就是windows自带的编码……  发表于 2014-4-15 17:54
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
389 小时
注册时间
2009-11-24
帖子
71
10
发表于 2014-4-14 20:12:56 | 只看该作者
taroxd 发表于 2014-4-14 20:04
1. ASCII哪来的中文字符……
2. 这个我知道,但是我无法重现这个问题。我这边一切正常 ...

用windows系统自带的记事本保存为utf-8编码时就会有了。
utf-8有两种,一种带有BOM的UTF-8,一种是无BOM的UTF-8,保存为无bom的utf-8就不会有那前3个字节了。

点评

我用的是原生xp系统的记事本,不知道win7,win8的情况怎么样……不排除diy过的系统把自带notepad换成notepad2或者notepad++之类的程序的可能。  发表于 2014-4-15 20:27
我是用windows自带的记事本保存的……也用Sublime Text保存过,都没问题……  发表于 2014-4-15 06:30
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-25 15:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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