![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.2ベストアンサー
- 回答日時:
1.
rubyではメモリを確保する必要はありません。必要なときに動的に確保されて、使用されなくなったら自動で開放されます。
どうしても確保したいときは、
str = " " * 256
等とすれば、(char*)型のようなものが確保できます。
外部プログラムを呼び出すときに、バッファが必要と指定されているのであれば、上記のように確保しておきます。(win32APIを使うときに目したくらいで、大抵は使わないと思います)
メモリ開放をどうしても手動で制御したいときは、
http://www.ruby-lang.org/ja/man/html/GC.html
を参照するとよいです。
2.
ファイルからのバイナリ読み込み例は
$KCODE="NONE" #←文字列等をバイト型で扱う
file = File.open("hoge.bmp")
file.binmode #←windowsの場合に必要
file.seek(10)
buf = file.read(4)
file.close
等とすれば、最初からオフセット10から4バイト読み込みます。詳細はFileとIOのリファレンスを参照ください。
(FileのスーパークラスがIOなのでFileオブジェクトからは両方のメソッドが使えます。)
http://www.ruby-lang.org/ja/man/html/File.html
http://www.ruby-lang.org/ja/man/html/IO.html
readで読み込んだ戻り値は、文字列(Stringクラスのオブジェクト)ですから、上記例なら、
buf[0] #←オフセット10の文字コード(バイナリ値)
buf[0,1] #←オフセット10の1バイトの文字列
buf[1,2] #←オフセット11から2バイトの文字列
ということになります。
ちなみに、Stringクラスはバイナリ情報も扱えます。詳細はStringリファレンスを参照ください。
http://www.ruby-lang.org/ja/man/html/String.html
byte型以外のバイナリを扱うには、unpackメソッドを使いますのでこちらのリファレンスも参照ください。
http://www.ruby-lang.org/ja/man/html/pack_A5C6A5 …
numarray = buf.unpack("i*") #int型の配列に変換。
ご回答ありがとうございます
いくつかヒントを下さりありがとうございます。
私がとりあえず実現したいのは、bmpを読み込んで、そのまま別のファイルにbmpとして吐き出す
ことなのですが、
$KCODE="NONE" #←文字列等をバイト型で扱う
file = File.open("Valhalla.bmp")
file.binmode #←windowsの場合に必要
file.seek(18)
width=file.read(4)
file.seek(22)
height=file.read(4)
print("width = ",width, "\n")
file.seek(54)
buf = file.read(3)
file.close
の様に書いているのですが、、、printの段階で、コンソールに width= 空白
となってしまったりして本当に値がとれているのかわからなくて・・・
申し訳ありませんが
bmp→bmpを教えて頂けないでしょうか
単純に全部のメモリを読み込んで 全部書き込むといった方法ではなく
width,heightを取得してから、
ループ等で、書き込みたいのです。
No.3
- 回答日時:
>width=file.read(4)
>print("width = ",width, "\n")
空白じゃなくて、バイナリをそのまま出力しているはずです。ファイルにリダイレクトして16進表示でもしてみるとわかります。
widthに入った4バイトのバイト列を、リトルエンディアン符号無し32bit整数として解釈したいと言うことだと思います。
width.unpack("V")[0]
で、整数値が得られます。
Cは型が弱いので、int変数にファイルから読み込んだり出来ますが( fread(&n, sizeof(int),1,fp) )、Rubyが型(クラス)の区別を厳密にするので、ファイルから読み込んだ物はバイト列で、バイト列を整数と解釈するためには明示的な変換が必要です。
No.1
- 回答日時:
1.メモリ動的確保
Rubyはガーベッジコレクタによるメモリ自動管理なので、
意識しなくても自動で確保・開放がされます。
メモリを意識しない分、「本来やりたい実装」に集中できます。
Javaもそんな感じです。(全く同じ仕組みで開放するのかは知りませんが)
意図的にfreeにする方法もあるのでしょうが、私はやったことがないから分かりません。
探してみたらこんなサイトを見つけたのでURLをば。
<<http://www.ruby-lang.org/ja/man/html/DL_PtrData. …
試してみて、うまくいけたら教えてください^^
2.ファイルから配列に
csvファイルですが、ちょうど実装した直後なので参考になれば。
require "csv"
class Main
def initialize
#変数の初期化
@hairetsu = []
filenm = "filename001.csv"
#csvファイル読み込み
csvRead(filenm)
end
def csvRead(file)
#ファイルをオープン
csvReader = CSV.Open(file)
#ファイルを1行ずつ読み込む
csvReader.each{|row|
#配列に1行分を入れる
@hairetsu << row.join(",")
}
#ファイルを閉じる
csvReader.close
end
end
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby プログラミング講師はまだ需要ありますでしょうか? 1 2022/11/07 19:43
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- その他(プログラミング・Web制作) プログラミング 処理速度 1 2022/11/25 11:05
- C言語・C++・C# 画像の画素値を変えるC言語のプログラムで指定された画像の中に白い三角形を右上に表示させるにはどのよう 3 2022/10/30 01:16
- その他(IT・Webサービス) 今、プログラミングスクールの『Tec⚫︎cademy」のRuby on railsを受講しているので 1 2023/05/10 22:10
- C言語・C++・C# プログラミング言語「C#」の難易度ってどれくらいですか? 4 2022/05/12 19:15
- その他(プログラミング・Web制作) プログラミングについて 4 2022/09/02 21:31
- IT・エンジニアリング 21歳の大学3年男です。 現在プログラミングを習得できるところに入ろうか悩んでます。 そのスクールは 3 2022/06/21 00:43
- その他(学校・勉強) 自分の市場価値を高めるには 3 2022/07/12 09:11
- その他(プログラミング・Web制作) プログラミングって本来数学的な計算をする為のものではないのですか? 学校で配られたFortran90 11 2022/08/25 22:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルを後ろから読...
-
[VBS] 16進数でバイナリファイ...
-
RGBのバイナリデータをCImageに...
-
バイナリファイルでOutOfMemory...
-
VBAでテキストファイルを複数開...
-
VBAでテキストファイルの改行を...
-
インデックスが配列の境界外で...
-
VBScriptの配列は、要素数を指...
-
Mscomm を使用してバイナリでデ...
-
バイナリファイルの一部分をカ...
-
ファイル内の(&H0A)を(&H0D0A)...
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
エクセルvbaでdocuworksprinter...
-
Cの関数で自分自身のパス取得
-
Windows10でコマンドプロンプト...
-
バッチファイル 二つ上のディ...
-
エクセルで複数のコメントのサ...
-
カンマ区切りのCSVファイルから...
-
Wordで差込印刷した後に別々の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DXFファイルをVBで取り込み、図...
-
バイト型のデータを16進表記で...
-
VBAでテキストファイルの改行を...
-
VBAでテキストファイルを複数開...
-
Cで2次元配列にCSVファイルを...
-
バイナリファイルでOutOfMemory...
-
テキストファイルを後ろから読...
-
[VBS] 16進数でバイナリファイ...
-
バイナリ読み込み時のデータ受...
-
ファイル入力のデータを構造体...
-
VBでLOOKUP機能
-
RGBのバイナリデータをCImageに...
-
VBScriptの配列は、要素数を指...
-
Excel VBAで画像解析
-
バイナリ出力
-
バイナリファイルの一部分をカ...
-
perl 特定の文字列をdatファイ...
-
awk getlineをもう一度ファイル...
-
CSVファイルによる検索の高速化
-
ファイル内の(&H0A)を(&H0D0A)...
おすすめ情報