[#46340] ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない — "(株)ネットフォレスト 植田裕之" <ueda@...>

植田と申します。

10 messages 2009/09/01
[#46344] Re: ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない — arton <artonx@...> 2009/09/01

artonです。

[#46345] Re: ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない — "NARUSE, Yui" <naruse@...> 2009/09/01

成瀬です。

[ruby-list:46419] ;Re: Re: エラーでした;Re: Re: 再送;;ruby1.8.7と1.9.2の文字処理について

From: eiichi_maekawa@...
Date: 2009-09-28 00:17:40 UTC
List: ruby-list #46419
前川です。

なかむら(う)さん、高橋さん ありがとうございます。

実施したいのは、そのまま、変換することです。
(エスケープシケンスの\は、仕方ありませんが・・・)
(\\は、\にしかできませんが)

本体;;
#!D:/Ruby/bin/ruby.exe

#require 'kconv'
#require 'nkf'
require 'D:/Apache2.2/htdocs/qmsPotalShip/myclass' #MyClass 変換メソッド等

# 試験データ
# 文字→HEXへ変換するためのデータ

data1 = '船海システムG' # 26バイトの '91448a43835683588365838047'に変換する
data2 = 'TEST' # 8バイトの '54455354'に変換する
data3 ='船'
data4 ='kaisya会社123重厚重工業・・あaア  /\¥'
data5 ='kaisya会社123重厚重工業あaイ  '
data6 ='会社'
data7 = 'C:/Apache2.2/htdocs/qmsPotalShip/confirmation/sjisコード表
textConversion用.html'
data8 = "12_FBSYS_不具合情報入力-所内工事(速報) 23船証第三確認者の確認画面
03:コメント記入前:船証.png"
puts '文字からHEXへ変換'

puts data1 + " → " + MyClassText.text_to_hex(data1)
puts data2 + " → " + MyClassText.text_to_hex(data2)
puts data3 + " → " + MyClassText.text_to_hex(data3)
puts data4 + " → " + MyClassText.text_to_hex(data4)
puts data5 + " → " + MyClassText.text_to_hex(data5)
〜以下略


MyClassText.text_to_hex(data?)は、以下

##!C:/Ruby/bin/ruby.exe -Ks

print "Content-Type: text/html\n\n"

require 'kconv' # Stringの日本語関連メソッド
require 'nkf' # 漢字関係 Network Kanji code conversion Filter version 1.7
require 'cgi' # CGI プログラムの支援ライブラリ
require 'mysql' #MySQLライブラリ
#require "rubygems" # ライブラリ管理ツール
#require "dbi"


CODES = {
  NKF::JIS      => "JIS",
  NKF::EUC      => "EUC",
  NKF::SJIS     => "SJIS",
  NKF::BINARY   => "BINARY",
  NKF::UNKNOWN  => "UNKNOWN(ASCII)",
}



class MyClassText

  # 文字を16進数の文字コードに変換する
  def self.text_to_hex(data)
    data.unpack('H*')[0]
  end

  # 16進数の文字コードを文字に変換する
  def self.hex_to_text(data)
    data.gsub(/../){|c| c.hex.chr}
  end

  #string内の特定文字列を、指定した文字で置き換える。
  #戻り値;置き換えた文字列
  #        該当する文字列が存在しない場合は、元の文字列を返す
  def self.string_change(data,org,change)
    data.gsub( org, change )
  end
end #MyClassText 終了

実施結果

Content-Type: text/html

文字からHEXへ変換
船海システムG → 91448a43835683588365838047
TEST → 54455354
船 → 9144
kaisya会社123重厚重工業・・あaア  /\¥ →
6b616973796189ef8ed03132338f648cfa8f648d488bc68145a582a061b12081402f5c818f
kaisya会社123重厚重工業あaイ   →
6b616973796189ef8ed03132338f648cfa8f648d488bc682a061b2208140

1.9系では、なかむら(う)さんより、バグとの指摘です。

> こんにちは、なかむら(う)です。

> In message "[ruby-list:46415] Re: エラーでした;Re: Re:  再
> 送;;ruby1.8.7と1.9.2の文字処理について"
> on Sep.25,2009 20:16:21, <maki@rubycolor.org> wrote:
> > という前川さんの問題とは別に、このような文字列リテラルの挙動は
> > エラーで正しいのでしょうかね。ASCII文字では問題なさそうですし。
> > 本来はどういう扱いであるべきなのでしょうか?

> バグでしょう。
> Index: parse.y
> ===================================================================
> --- parse.y (revision 25091)
> +++ parse.y (working copy)
> @@ -5737,6 +5737,8 @@ parser_tokadd_string(struct parser_param
> }
> else if (c != term && !(paren && c == paren)) {
> tokadd('\\');
> +      pushback(c);
> +      continue;
> }
> }
> }

1.8系で、進めることにします。
今、作成中のシステムでは、上記の文字変換が、必須です。
また、逆に16進コードから、文字への変換も必要です。

文字→HEX→文字 の場合は、
kaisya会社123重厚重工業・・あaア  /\¥
 →
6b616973796189ef8ed03132338f648cfa8f648d488bc68145a582a061b12081402f5c818f
 → kaisya会社123重厚重工業・・あaア  /\¥

という結果がほしいのです。

ありがとうございました。

しかし、1.9系で、# -*- coding: windows-31j -*-を2行目rに追加しても
実行できない原因は、不明のままです。
どなたか、ご教示ください。

[ruby-list:46414] エラーでした;Re:  Re:  再送;;ruby1.8.7と1.9.2の文字処
理について

> 2.結果

> D:/Apache2.2/htdocs/ruby_prg/ruby19check/myclassTextTest.rb:13: invalid
> multibyte char (Windows-31J)
> D:/Apache2.2/htdocs/ruby_prg/ruby19check/myclassTextTest.rb:14: syntax
> error, unexpected tIDENTIFIER, expecting $end
> data5 ='kaisya会社123重厚重工業あaイ  '
> ^
> Complete(1)

> 何が、まずかったのでしょうか。
> Rubyは、1.9.1p129 です。
> Ruby1.9.2devでも、同様のエラーが出ました。


In This Thread

Prev Next