Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ruby修改.sql文件?_Sql_Ruby - Fatal编程技术网

如何使用ruby修改.sql文件?

如何使用ruby修改.sql文件?,sql,ruby,Sql,Ruby,我有一个sql文件(alice.sql),在编辑器中看起来像这样 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_dg_object_extern_pub_dg_extern_pub_status]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)ALTER TABLE [dbo].[dg_object_extern_pub] DROP CONSTRAIN

我有一个sql文件(alice.sql),在编辑器中看起来像这样

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_dg_object_extern_pub_dg_extern_pub_status]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)ALTER TABLE [dbo].[dg_object_extern_pub] DROP CONSTRAINT FK_dg_object_extern_pub_dg_extern_pub_status GO
如果我将该文件加载到irb中,它看起来是这样的

 f = File.open("alice.sql").readlines
看起来是这样的:(

我想搜索并替换文件中的一些字符串,但现在这似乎不可能

有什么想法吗?

使用
f=File.open(“alice.sql”)。readlines
可以打开一个文件句柄,但不能关闭它

你应该做:

f = File.open("alice.sql")
lines = f.readlines
f.close

使用
File#readlines
可以获得一个行数组。如果要在字符串中进行替换,则应使用
read

File.open("alice.sql"){|f|
  content = f.read
}
最后,但并非最不重要的一点是:您的alice.sql似乎是UTF16,因此您必须将其读作UTF-16:

File.open("alice.sql", :encoding => 'UTF-16BE:UTF-8'){|f|
  content = f.read
}
现在您得到了
\uFEFFif exists(选择…
),您看到了前导BOM吗? 要摆脱它,请使用:

File.open("alice.sql", :encoding => 'BOM|UTF-16BE:UTF-8'){|f|
  content = f.read
}
(需要ruby 1.9,可能BOM版本需要1.9.3)

如果需要块外的内容,则必须在块外定义变量(或者使用File#close)


它使用UTF-16或UCS-2编码。查看本地化和编码的工作原理。有任何资源吗?thanx Previous:)(关于输出,但同样适用于输入)。谢谢,这是一个很棒的资源!看起来很有趣…似乎不是UTF-16\uFFFE椀昀 攀砀椀猀琀猀你能试试UTF-16LE吗?我还没查过,你有大的还是小的endian。
File.open("alice.sql", :encoding => 'UTF-16BE:UTF-8'){|f|
  content = f.read
}
File.open("alice.sql", :encoding => 'BOM|UTF-16BE:UTF-8'){|f|
  content = f.read
}
content = nil #define variable, so you get the content after the open-block
File.open("alice.sql", :encoding => 'BOM|UTF-16BE:UTF-8'){|f|
  content = f.read
}
p content