テキストファイルに書いてある漢字ってどんな風に読めばいいんですか?
例えば、
田中 2
鈴木 3
田中 5
  ・
  ・ 
ってかいてあるのを
田中 2 5
みたいにしたいんですけど。
もしそれができないなら漢字を無視して読む方法を教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

文字列として読み込めば良いと思うんだけど…。


田中 5→田中 2 5
“2”は漢字部分の文字数と考えて良いですか?
文字数数えるなら読み込んでから1バイトずつチェックすればオッケー。
漢字コードによってチェック法が微妙に違うので詳細の補足を希望。

・漢字コードは何ですか?
・Cですか?C++ですか?
・OSはなんですか?
・使用可能なライブラリは何ですか?

「Cで標準入出力」とか「C++でSTL」とか「WindowsのC++でMFC」とか…。
処理系によっては「漢字(っていうかマルチバイト文字列)の文字数カウント」を標準でサポートしてるものもあるし。

例えばUNICODEを使っているならlstrlenで文字数(バイト数でなく)のカウントが可能なCの処理系が存在します(Windows VisualC++など)。
他の処理系ではwstrlenが利用可能なことも。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qテキストの読み込み

数値が書き込まれている2つのテキストファイルを同時に読み込ませてループしていくのは
どうしたら良いですか?

x.txtが1行目を読み込んだら,y.txtも1行目を読み込むように行いたいです。

Aベストアンサー

言っている意味が良く判らないけど、

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 FILE *fx;
 FILE *fy;

 char sx[256];
 char sy[256];

 if ((fx = fopen("x.txt", "r")) == NULL) {
  printf("file open error!!\n");
  exit(EXIT_FAILURE);
 }
 if ((fy = fopen("y.txt", "r")) == NULL) {
  printf("file open error!!\n");
  exit(EXIT_FAILURE);
 }
 while (1) {
  if (fgets(sx, 256, fx) == NULL) break;
  if (fgets(sy, 256, fy) == NULL) break;
    /* 読み込んだ後の処理 */
 }
 fclose(fx);
 fclose(fy);
 return 0;
}

みたいな感じ?

言っている意味が良く判らないけど、

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 FILE *fx;
 FILE *fy;

 char sx[256];
 char sy[256];

 if ((fx = fopen("x.txt", "r")) == NULL) {
  printf("file open error!!\n");
  exit(EXIT_FAILURE);
 }
 if ((fy = fopen("y.txt", "r")) == NULL) {
  printf("file open error!!\n");
  exit(EXIT_FAILURE);
 }
 while (1) {
  if (fgets(sx, 256, fx) == NULL) break;
  if (fgets(sy, 256, fy) == NULL) break;
    /* ...続きを読む

Qテキストを一文字以上ずつ読み込みたい。

通常テキストを一文字ずつ読み込む時って
cin.get(c)とか、やりますよね?
でも、二文字ずつ読み込む時ってどうやるんですか?
そもそもできるんでしょうか?
もしできないとしたら、それに相当する書き方とかあるんでしょうか?

Aベストアンサー

iostream(ていうかC++)はよく解らないのですが...

"stdio.h"に定義されているfgets()関数を使えばいいのではないでしょうか。
fgets(
char* 読込先の文字配列,
int 読む文字数+1,
FILE* 読み込むファイルポインタ);
です。

以下は使用例です。

#include <stdio.h>
int main(){
 char buf[5];
 FILE* fp;

 if((fp=fopen("C:\\aaaa.txt","ra"))==NULL){
  printf("ファイルのオープンに失敗.\n");
  return 0;
 }

 fgets(buf, 3, fp);
 printf("%s\n", buf);

 fclose(fp);
 return 0;
}

fopen関数でファイルのファイルポインタを作って
fgets()で二文字読み、表示してから
fclose関数でファイルポインタを無効にします。

配列を知らないって場合はちょっときついかもしれませんが...
ま、その際は補足要求をどうぞ。

iostream(ていうかC++)はよく解らないのですが...

"stdio.h"に定義されているfgets()関数を使えばいいのではないでしょうか。
fgets(
char* 読込先の文字配列,
int 読む文字数+1,
FILE* 読み込むファイルポインタ);
です。

以下は使用例です。

#include <stdio.h>
int main(){
 char buf[5];
 FILE* fp;

 if((fp=fopen("C:\\aaaa.txt","ra"))==NULL){
  printf("ファイルのオープンに失敗.\n");
  return 0;
 }

 fgets(buf, 3, fp);
 printf("%s\n", buf);
...続きを読む

QC++でvectorにテキストファイルを読み込む

C++でテキストファイルを読み込んで平均、標準偏差などを表示するプログラムを作っているのですが、
vectorにテキストファイルを読み込ませる方法が分からないので教えていただけないでしょうか?

int型の配列に読み込ませる方法もありますが、テキストファイルのデータ数が未知数のためvectorを使いたいです。

Aベストアンサー

ものごとは正確に認識し正確に表現しましょう。そうでなければプログラミングは出来ません。

>vectorにテキストファイルを読み込ませる
きわめてあいまいな表現です。
これを文字通りに受け止めれば vector<char>にテキストファイルの内容を一文字ずつ読みこむということになりますが、違いますよね?

恐らく、そのテキストファイルには複数の数値が文字表現として記録されていて、その個々の数値をvector<int>(またはvector<double>他)に格納したいということでしょうね?

さて、そのテキストファイルの書式は如何なるものでしょう?
数値と数値の区切りはスペースですか?カンマですか?改行ですか?
これが判らなければソースコードは書けません。

このような詳細は回答者に補足要求される前にご自分で最初から明確にしたうえで質問すべきです。

さて、とりえあえず、テキストファイルには整数値がスペースを区切りとして並んでいる。
それをvector<int>に順に読みこむと言う仕様でサンプルを示します。
ヘッダ、ネームスペースは省略。

vector<int> array;
ifstream file("filename.txt");
int buf;
while ( file >> buf ) array.push_back(buf);

上の解答を書いてる間に質問者から補足がありましたね。
でもまぁ、この回答の趣旨に訂正は必要無いと思いますのでそのままアップします。
ファイル内の区切りがスペースでも改行でもこのサンプルで問題ありません。

ものごとは正確に認識し正確に表現しましょう。そうでなければプログラミングは出来ません。

>vectorにテキストファイルを読み込ませる
きわめてあいまいな表現です。
これを文字通りに受け止めれば vector<char>にテキストファイルの内容を一文字ずつ読みこむということになりますが、違いますよね?

恐らく、そのテキストファイルには複数の数値が文字表現として記録されていて、その個々の数値をvector<int>(またはvector<double>他)に格納したいということでしょうね?

さて、そのテキストファ...続きを読む

Qテキストファイルを読み込んでくれません。

はじめまして。
質問があります。
現在Visual C++ 2005 Express Editionを使用してC言語を学習中なのですが、fopen()関数に指定したテキストファイルを読み込んでくれませ
ん。何か設定が必要なのでしょうか?ご教授お願いします。

Aベストアンサー

Ans No.1の者です。

>テキストファイルをどこに配置したら良いのかまた、fopen()で
>テキストファイルをオープンするためにプロジェクトに追加するとか、そういった設定方法がわからないのです。

扱いたいファイルをどこに置くかは自由です。
置いた場所を、プログラムで正しく指定すればよいのです。
また、プロジェクトとは特に関係なくて、追加などの操作を行なう必要はないはずです。

>if( (fp=fopen("hw.dat","r")) == NULL )

このコードの場合、実行ファイル(exeファイル)が
存在するフォルダと同じところにhw.datがあればよいです。

QC言語での、テキストファイル読み込みについて

30行×30列の数字が記載されてテキストファイルがあり、
それをC言語で例えばA[ ][ ]といった配列に読み込みたいのですが、
どうすればよいでしょうか?

fscanf関数を用いればできないことはないと思うのですが、
30個も書かなければならないのは冗長なので・・・。

なにかよい方法はありますでしょうか?

Aベストアンサー

>for(i=1;i<=30;i++){
>fscanf(fp, "%lf %lf・・・ %lf\n", &n1, &n2,・・・,&n30);
>}

配列使って、多重ループにするのが普通…かと。

for(i=0;i<30;i++) {
 for(j=0;j<30;j++) {
  fscanf(fp, "%lf", &a[i][j]);
 }
}
って感じでしょうかね。
入力テキストの形式が異なる場合などのエラー処理は必要でしょうが…。


人気Q&Aランキング

おすすめ情報