ラベル 動的確保 の投稿を表示しています。 すべての投稿を表示
ラベル 動的確保 の投稿を表示しています。 すべての投稿を表示

2013年11月26日火曜日

設定ファイルの入出力

適当な区切り文字(「:」、「=」 etc.)で区切られて保存されている設定ファイルを入出力する例題です。

設定ファイルから読み込まれた値は全てメモリ内に動的に確保され、設定の変更後(キーによる検索、更新、追加)、元の設定ファイルに書き出すことができる例題となっています。

区切り文字の値(例題では「 = 」)を適宜変更して利用できます。

設定ファイルは値を書き込んだものを予め準備していますが、無い場合にはファイルを作成し、SetSettings にて設定した値が SaveSettings にてファイルに書き込まれます。 実行結果

2011年9月20日火曜日

CSV ファイルのデータ内容に合わせて3次元文字配列の動的確保 (char 型)

CSV ファイルのデータ内容に合わせて3次元文字配列を動的に確保し、表示する例題です。

char 型のデータを動的に確保し、確保した文字列の表示、行と列を入れ替えて文字列の表示を行なっています。

実行結果

2011年9月19日月曜日

CSV ファイルのデータ内容に合わせて2次元配列の動的確保 (int, double 型)

CSV ファイルのデータ内容に合わせて2次元配列を動的に確保し、表示する例題です。

前回 の例では、int 型のデータ構造にしか対応していませんでしたが、今回の例では double 、指数表示(ex. 5.3766714e-01)型のデータにも対応し、データの表示、編集を行なっています。

指数表示型のデータは実質 double 型で扱って良いもので、DispData で表示される形式が異なるのみとなります。

実行結果

2011年5月14日土曜日

構造体データのバイナリファイル出力、読み取り

構造体データをバイナリファイルとして出力し、バイナリファイルから構造体データを読み取る例題です。

固定サイズの構造体の場合
読み取りの際には、構造体データのサイズ毎に読み取り、データが無くなるまで処理を行っています。
実行結果
サイズが変動する構造体の場合

上記の例題では、読み書きのサイズには sizeof(entry) にてサイズを指定していますが、文字列の長さが可変の場合には注意が必要で、文字列の長さに応じて構造体のサイズを毎回計算する必要があります。

以下の例題では、構造体のサイズが毎回異なる場合のファイル出力、読み込み、表示を行なっています。

ファイルフォーマット:
[格納する名前の数][リストのタイトル][格納数に応じた名前の長さ、文字列の繰り返し]
[格納する名前の数][リストのタイトル][格納数に応じた名前の長さ、文字列の繰り返し]
[格納する名前の数][リストのタイトル][格納数に応じた名前の長さ、文字列の繰り返し]
→ 格納する名前の数が読み取れなくなるまで構造体を読み取る
実行結果
既存のフォーマットファイルの場合(.bmp/.wav ファイル)

RFC 等により既定されている既存のファイルフォーマットは、構造体の形式を予め調べておくことにより入出力することができます(画像:ビットマップ形式、PNM形式、音声:AAC/ADTS形式)。

以下では、Windows PCM フォーマット(拡張子 .wav)のファイルを読み込み、チャンネル数やサンプリング周波数等の情報の表示を行なっています(WAVE/PCM 音声の生成)。
実行結果

2011年4月18日月曜日

テキストファイルを区切り文字ごとに分割し、禁句が含まれる文章を除外

テキストファイルを区切り文字ごとに分割し、禁句が含まれる文章を除外する例題です。

本記事末にある文章を区切り文字毎に分割し文字配列として記憶した後、その配列ごとに禁句が含まれるかチェックし、表示する、しないを選択しています。

処理の流れとしては、
1. テキストファイルの内容を文字列として読み込み
2. 文字列から区切りの数を数える
3. 区切り分の2次元文字配列を準備
4. 区切り文字ごとに文字列を配列に記憶
5. それぞれの文字配列ごとにタブーワードが含まれるかチェックし表示
という形になります。


実行結果
% ./list_xxx
0: 多倍長演算を利用した四則演算
Posted: 2011-04-18 01:40:39 UTC+09:00
多倍長演算を利用した四則演算の例題です。 20 桁ほどの計算を行っていますが、関数電卓等で計算できる範囲になりますので、結果を確かめてみてください。 #include #define ORDER 20 #define N ((ORDER-1)/4+1) void addLDV(short* a, short* b, short* c); void subLDV(short* a, short* b, short* c); void mulLDV(short* a, short b, short* c); void divLDV(short* a, short b, short* c); void printLDV(short* c); int main(int argc, int argv) { short a[N+2] = {


1: ファイル中から文字列を検索し、文字列を追加/置換
Posted: 2011-04-18 01:33:05 UTC+09:00
ファイル中から文字列を検索し、文字列を追加/置換する例題です。 1行毎に処理を行っていますが、複数マッチする場合にも対応しています。 #include #include #include void chop_crlf(char* buf); char* FindAndReplaceString(char* buf, char* find, char* repstr); char* FindAndInsertString(char* buf, char* find, char* insert); int main(int argc, char* argv[]) { FILE *fp; const char* ifile = "reidai.txt"; const char* schstr = "pen"; const char* insstr


2: ファイル中から文字列を検索し、文字列を追加
Posted: 2011-04-18 01:35:01 UTC+09:00
ファイル中から文字列を検索し、文字列を追加する例題です。 1行毎に処理を行っていますが、複数マッチする場合にも対応しています。 #include #include #include void chop_crlf(char* buf); char* FindAndInsertString(char* buf, char* find, char* insert); int main(int argc, char* argv[]) { FILE *fp; char *p; const char* ifile = "reidai.txt"; const char* schstr = "pen"; const char* insstr = "desu"; char buf[512]; printf("search


3: 指定した文字列の後ろに文字列を追加
Posted: 2011-04-17 23:34:31 UTC+09:00
指定した文字列の後ろに文字列を追加し、新しい文字列として取得する例題です。 #include #include #include #define STRING "Hello World!!" char* FindAndInsertString(char* buf, char* find, char* insert) { char* newstring; char* sp = strstr(buf,find); if ( sp == NULL ) return buf; sp += strlen(find); newstring = (char*)calloc(sizeof(char),(strlen(buf)+strlen(insert)+1)); strncpy(newstring,buf,strlen(buf)-


5: ビットマップファイルの読み込み/編集/保存
Posted: 2011-04-17 02:27:06 UTC+09:00
ビットマップファイルフォーマット(8bit:256パレットカラー/16bit:RGB565/24bit:RGB888/32bit:RGBA8888)の画像の読取/編集/保存例です。 ビットマップはそれぞれの色毎に表示、編集することが可能となっています。例題では、引数に -r や -g を与えると、色反転、ガンマ補正を行うことができます。また、-o/-b により編集を行った画像を指定のビット数で保存します(16bit:RGB565/24bit:RGB888/32bit:RGBA8888 BMP)。 ビットマップは1ライン当たりのデータ数が4Byte(long)の倍数に限られているため##データの読取には注意が必要です。1ラインが4で割り切れない場合、足りないバイト数(足りない部分はパディングビット=0が詰め込まれている)を加えて計算する必要が##ります。具体的には、

%

document.txt
●多倍長演算を利用した四則演算
Posted: 2011-04-18 01:40:39 UTC+09:00
多倍長演算を利用した四則演算の例題です。 20 桁ほどの計算を行っていますが、関数電卓等で計算できる範囲になりますので、結果を確かめてみてください。 #include #define ORDER 20 #define N ((ORDER-1)/4+1) void addLDV(short* a, short* b, short* c); void subLDV(short* a, short* b, short* c); void mulLDV(short* a, short b, short* c); void divLDV(short* a, short b, short* c); void printLDV(short* c); int main(int argc, int argv) { short a[N+2] = {

●ファイル中から文字列を検索し、文字列を追加/置換
Posted: 2011-04-18 01:33:05 UTC+09:00
ファイル中から文字列を検索し、文字列を追加/置換する例題です。 1行毎に処理を行っていますが、複数マッチする場合にも対応しています。 #include #include #include void chop_crlf(char* buf); char* FindAndReplaceString(char* buf, char* find, char* repstr); char* FindAndInsertString(char* buf, char* find, char* insert); int main(int argc, char* argv[]) { FILE *fp; const char* ifile = "reidai.txt"; const char* schstr = "pen"; const char* insstr

●ファイル中から文字列を検索し、文字列を追加
Posted: 2011-04-18 01:35:01 UTC+09:00
ファイル中から文字列を検索し、文字列を追加する例題です。 1行毎に処理を行っていますが、複数マッチする場合にも対応しています。 #include #include #include void chop_crlf(char* buf); char* FindAndInsertString(char* buf, char* find, char* insert); int main(int argc, char* argv[]) { FILE *fp; char *p; const char* ifile = "reidai.txt"; const char* schstr = "pen"; const char* insstr = "desu"; char buf[512]; printf("search

●指定した文字列の後ろに文字列を追加
Posted: 2011-04-17 23:34:31 UTC+09:00
指定した文字列の後ろに文字列を追加し、新しい文字列として取得する例題です。 #include #include #include #define STRING "Hello World!!" char* FindAndInsertString(char* buf, char* find, char* insert) { char* newstring; char* sp = strstr(buf,find); if ( sp == NULL ) return buf; sp += strlen(find); newstring = (char*)calloc(sizeof(char),(strlen(buf)+strlen(insert)+1)); strncpy(newstring,buf,strlen(buf)-

●PNM(Portable anymap ファイルフォーマット)の読み取り/編集/保存、BMPへの変換
Posted: 2011-04-17 02:23:39 UTC+09:00
PNM 画像の読取/編集/保存例です。 PNM(portable anymap ファイルフォーマット)は、pbm(portable bitmap)、pgm(portable graymap)、ppm(portable pixmap)の各画像フォーマットを総称した名前です。 PNM のファイル形式はテキスト/バイナリ形式を選択することにより、メモ帳等でも簡単に編集することが可能です。 その形式には以下の6種類があります。 P1 (PBM) 2値画像 テキスト形式 P2 (PGM) 濃淡画像 テキスト形式 P3 (PPM) カラー画像 テキスト形式 P4 (PBM) 2値画像 バイナリ形式 P5 (PGM) 濃淡画像 バイナリ形式 P6 (PPM) カラー画像 バイナリ形式 P4〜P6 の形式では画像のヘッダ部分を除いた画像データ部を

●ビットマップファイルの読み込み/編集/保存
Posted: 2011-04-17 02:27:06 UTC+09:00
ビットマップファイルフォーマット(8bit:256パレットカラー/16bit:RGB565/24bit:RGB888/32bit:RGBA8888)の画像の読取/編集/保存例です。 ビットマップはそれぞれの色毎に表示、編集することが可能となっています。例題では、引数に -r や -g を与えると、色反転、ガンマ補正を行うことができます。また、-o/-b により編集を行った画像を指定のビット数で保存します(16bit:RGB565/24bit:RGB888/32bit:RGBA8888 BMP)。 ビットマップは1ライン当たりのデータ数が4Byte(long)の倍数に限られているため、データの読取には注意が必要です。1ラインが4で割り切れない場合、足りないバイト数(足りない部分はパディングビット=0が詰め込まれている)を加えて計算する必要があります。具体的には、

2011年3月26日土曜日

メモリの再割り当て

メモリを再割り当てして利用する例題です。

実行結果

2011年3月24日木曜日

CSV ファイルのデータ内容に合わせて2次元配列の動的確保(int 型)

CSV ファイルのデータ内容に合わせて2次元配列を動的に確保し、表示する例題です。

その他、CSVデータを動的に配列として読み取る例や、クラス化して扱う例などは こちら

csvdata.csv
実行結果

2011年3月19日土曜日

文字列の検索、プログラムパスの分割

プログラムパスを分割し2次元配列へとコピーする例題です。

配列は動的に確保されます。
パスの分割の際、UNIX パスと DOS パスではそれぞれ書式が異なりますので、それぞれ関数を用意しています。
検索する文字列、区切り文字はそれぞれ異なっています。

実行結果

2011年3月18日金曜日

2次元配列の動的確保

'\n' 文字毎に区切られた文字列を格納するための配列を、動的に確保する例題です。
それぞれの配列は2次元配列として確保されます。

その他例題は こちら
実行結果

2011年3月11日金曜日

文字列の領域を動的に確保

文字列の領域を動的に確保し、利用後に解放する例題です。

確保された領域は必ず解放するように心がけてください。



実行結果