• ベストアンサー

ファイル操作について

すみません。初心者ながら質問させて頂きます。 開発環境はVC++.NETです。 現在、困っている部分を例に挙げて説明させて 頂きます。 例) CSVファイルから読み取ったデータが"123456789,1,1" があります。 上記のデータをある配列に格納します。 test[0]には、'123456789' test[1]には、'1' test[2]には、'1' ここまではすんなりできました。 問題はここからです。 test[0]のデータ('123456789')を 2バイト、3バイト、4バイトで 他の変数にデータを格納したいのです。 [格納変数] input1のデータ'12' input2のデータ'345' input3のデータ'6789' 上記のようなバイト分割は可能でしょうか? 以上です。 お手数ですが、アドバイス、ヒント、回答などを いただけたら幸いです。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kaha
  • ベストアンサー率23% (41/177)
回答No.3

CString型なら簡単でしょう? input1 = test[0].Left(2); input2 = test[0].Mid(2,3); input3 = test[0].Mid(5);

ryou0607
質問者

お礼

ありがとうございます。 こんなすばらしい関数があることを しりませんでした。 もっと勉強します。

その他の回答 (2)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

#1ですが、すみません。1箇所間違えました。 >.NET FrameworkのSystem.String ではなく、 .NET FrameworkのSystem::String でした。

ryou0607
質問者

補足

すみませんでした。 補足しますと、MFCのCStringです。 宜しくお願い致します。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

文字列を扱っているのはなんでしょうか? char*またはchar[]、 MFCのCstring、 STLのstd::string、 .NET FrameworkのSystem.String のいずれかだとは思うのですが、それぞれに対して有効/効果的な方法が違いますので、補足願います。

ryou0607
質問者

補足

#2で補足させていただいたのですが、 もうひとつつけたすと、 CString型の***[_MAX_FNAME+1]です。 宜しくお願い致します。

関連するQ&A

  • Excel(VBA)で配列の要素数を調べるには?

    お世話になります。 ExcelのVBAで、split関数を使って配列に格納したデータの要素数を調べる方法がわかりません。 下記のようなコードで、読み込んだデータを配列(Arraydata)に格納することは出来たのですが、test.csvの要素数が処理の度に変わるため、要素数に応じて後続の処理を行ないたいと考えています。 Open test.csv For Input As #1 ' test.csvファイルを開く Line Input #1, test.csv ' データ行を読み込む Arraydata = Array(Split(test.csv, ",")) ' 配列に格納 よろしくお願いします。

  • CString型の文字列連結について

    質問させて頂きます。 開発環境はVC++.netです。 CString型の文字列連結について教えて頂きたく。 CString Test[_MAX_FNAME+1]; という変数にがあるとします。 Test変数のデータは Test[0]には"2" Test[1]には"1" が格納されてるとします。 Test変数のデータをCString Text1という変数に 以下のようなソースで文字列連結処理を行ったのですが、だめでした。 何がいけないのでしょうか? for(int i = 0; i <= 2; i++) { Text1 += Test[i]; } 実行結果は Text1には"2"が格納されたままでした。 実際はText1には、"2""1"となってほしい。 分かりにくい説明とは思いますが、 回答、ヒントなどを頂けますでしょうか 宜しくお願い致します。 それと、もしよかったら、Text1の格納データは "2","1"としたいので、カンマ区切りのやりかたなども ヒントを頂けたら幸いです。 以上です。 宜しくお願い致します。

  • php配列格納

    $lines = file ('db.csv'); 上記でファイルの中身を配列に入れますがその逆で データを配列にして格納したいのですがどうすればいいのでしょうか? ファイルの不要な行を除いて再度変数に配列で格納しファイルを作成 したいのです。

    • ベストアンサー
    • PHP
  • sizeofについて

    質問させて頂きます。 開発環境はVC++.NETです。 CString型のFileDir変数に"TextText"と格納し、 long size = sizeof(FileDir)をしたところ、 sizeには通常8byteが格納されるはずですが、4byteが格納されていました。 なぜ、そうなるのかご存知の方いましたら、 ヒント、回答の方を宜しくお願い致します。 以上です。

  • CSVファイルをVBAからインポートしたい(Access2002)

    はじめましてよろしくお願いします。 Access2002でSQLServerでこの機能を実現しようと思っています。 CSVファイルの電話番号データ[03-1111-1111]を変数に格納すると[3]となってしまい、困っております。(同様に郵便番号データ[123-4567]も[123]となってしまいます。)日付データについては#で囲むことでうまくいったのですが、これらのデータを#や”や’などで囲ってみても正しく格納されません。 もしもお気づきの点がございましたらご教授よろしくお願いします。 今行っている処理を下に書きました。 [取込先のテーブル] 個人ID(varchar),電話番号(varchar),郵便番号(varchar) [CSVファイルの内容] 0001,03-1111-1111,123-4567 Dim FileDes As Integer '// ファイル識別番号 Dim HENSU(2) '// 一行分のデータを格納する配列 FileDes = FreeFile '// ファイル識別番号を取得 Open [CSVファイル名] For Input As #FileDes   Input #FileDes, HENSU(0), HENSU(1), HENSU(2) とおこなっています。

  • C言語・ファイルと文字列の操作プログラムについて!

    ファイルのデータを1行ずつ読み込み、","で区切られた要素に分割して配列に格納するプログラムの作り方を教えてください。 下記のようなファイルがあり、各行の3つめの要素の数字(ハイフンを含む)を各行で比較し、昇順に行をソートするというプログラムを作成しております。 要素数は4つめ以降各行ばらばらです。 [ファイル test.txt] 2013/08/01,16:19,20130801161906-210164001071,,,川口,神奈川,,電話番号 2013/08/01,11:32,20130802003256-116091178056,鈴木,埼玉,mail,電話番号 2013/08/01,15:55,20130801155519-119072194140,,,山田,東京,mail まず、ファイルを読み込み、3つめの要素を下記のように配列s[i]に格納しようとしたのですが、うまく配列に3つめの要素がはいってくれません。 strtokを用いたプログラムを作っているのですが、1行ずつ分割と表示はできるものの、それを配列に格納することができなくて困っております。 配列の格納にstrcpyを用いたところ、途中でプログラムが強制終了し、配列への格納ができませんでした。 [格納の例] s[0]=20130801161906-210164001071 s[1]=20130802003256-116091178056 s[2]=20130801155519-119072194140 [自分のプログラム] #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 300 int main() { char filename[] = "test.txt"; FILE *fp; char data[MAX], *words[MAX],*s[MAX],*cp; const char *delim=","; int g,i=0,j,len; // ファイル・オープン if ((fp = fopen(filename, "r")) == NULL) { printf("ファイルのオープンに失敗\n"); exit(1); } while (fgets(data, MAX, fp) != NULL) //1行読み込む { cp = data; for (len = 0; len < MAX; len++) { if ((words[len] = strtok(cp, delim)) == NULL) //","で文字列を分割 break; cp = NULL; } s[i] = words[2]; //3つ目の要素を配列に格納 i++; } for(j=0;j<3;j++){ //表示 printf("%s\n",s[j]); } [実行結果] 20130801155519-119072194140 20130801155519-119072194140 20130801155519-119072194140 プログラムの訂正箇所,上記と異なるプログラム,大体の流れ… などなんでもかまいませんので、教えていただきたいです。よろしくお願いします。

  • 【設計】vb.netでファイルを読み込みDB登録を行う

    すみません、vb.netで開発を行うにあたり設計に詳しい方が いらっしゃいましたらご教授願います。 開発する機能はタイトルの通り、txtファイルからデータを読み取り 内容をデータベースに登録するというものですが 現在、開発するにあたり二つのロジックを思いついており どちらが適切か迷っております。 (1) あらかじめtxtファイルの内容を全てリードし配列等の一時変数に退避   ファイルリード終了後、配列に格納されたデータを1件ずつ登録 (2) txtファイルの内容を1件リードするごとにデータベースに登録 開発環境は、vb.net、Oracle です。 txtファイルに格納されているデータ量はファイルにより様々ですが 多くても2万件が予想されます。 迷っている理由としては、 (1)は2万件のデータ量を配列に格納したとしてメモリが耐えれるかどうか? (2)は、1件ずつ読込みデータベースに登録するとなると  その分ファイル及びデータベースへのアクセス時間が長くなり  負荷がかかるのでは? という、懸念事項が考えられ迷っております。 上記、二つの開発手法の内どちらがベストか または、上記以外にベストなロジックがあればご教授お願い致します。

  • [マクロ]配列を区切り文字で変数に格納する方法

    タイトルの通りなのですが、 例えば、 A1~B10にランダムな数字が入っています。 (1)A1~B10を配列Cに格納します。 (2)配列C(1,10)を変数test1に格納します。  ※その時に各配列を/で区切る (3)配列C(2,20)を変数test2に格納します。  ※その時に各配列を/で区切る (4)test1をセルC1に記入 (5)test2をセルC1に記入 のような感じです。 配列に格納する方法はさすがに分かるのですが、区切り文字を入れて変数に格納する方法が分かりません。。。。 ご教授お願いいたします。

  • Mscomm を使用してバイナリでデータを受信したい

    Mscommを使用して、垂れ流しデーターをバイナリで受信(受信データ長さは変化する)するとき、このデーターをどうやって、配列に格納していけば良いのでしょうか? (垂れ流しデータ ⇒ < STX >nnn-nnn・・・・< ETX >< CHK >) また、配列に格納したデーターを文字に置き換えるにはどうすれば良いでしょうか? まず考え方として以下の流れでよいでしょうか? バイナリデータをバリアント型の変数に入れる。(受信する)      ↓ このデータを1バイトごとにバイト型変数の配列に入れていく。      ↓ 格納した配列の中の制御文字を取り除く。( ST、EX )      ↓ 配列に入っているデータを文字に変換する。      ↓ 変換した文字をつなぐ。 受信するデーターが制御文字を含んでいる為、テキストで受信するとおかしな動作をすることがあるので(150バイト程度のデーターを、バッファから変数に移すときに、0.5~2.5秒もかかってしまうし、文字化けも時々起こす。)バイナリで受信してその後文字に変換したいのですが・・・。 宜しくお願い致します。

  • 変数名の使用について

    初心者です。 loadMovie();を使って外部JPGを読み込みし、 ファイル名に変数を使いたいのですが、うまくいきません。 とういか可能ですか? CSVデータより配列に格納し、配列を変数に入れてその名前でJPGにアクセスしたいです。 ↓これがうまく動いたので↓ getURL("http://www.▲▲▲.jp/"+hensu+".html"); ↓これもうまく動くと思ったら動かない・・・↓ MC.loadMovie(hensu+".jpg"); よろしくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう