
No.3ベストアンサー
- 回答日時:
最後の1文字を削除したいということでしょうか?
m_InputData.Delete(m_InputData.GetLength() - 1);
# 最後の1文字が漢字とかだとまずいですが。
参考URL:http://www.microsoft.com/JAPAN/developer/library …
回答ありがとうございます。
正確には最後から2文字以降を削除したいのですが、参考サイトを見てもすぐには理解できませんでした。
教えていただけると大変助かります。
どうかお願い致します。
No.8
- 回答日時:
やりたいことはともかくとしてCStringを使っているのにメンバ関数を活かしてないような気がしますが。
CStringは文字列を扱うのに非常に便利ですからいくつか関数を覚えて使うようにすると良いと思います。特定文字を置き換えるならこの場合はGetLength()で-2でも良いのかもしれませんが、Find()かReverseFind()あるいはFindOneOf()で見つけてSetAt()で置き換えるとか。
見つけた部分から前だけを抽出するならFind()で取ったnCountを使ってLeft()で抽出、=で代入するとか。
文字数を削るなら\0代入でなく、Mid()で割って=で代入するとか。
ホワイトスペース(空白、改行、タブ)を取り除くならTrimRight()を使うとか。
No.7
- 回答日時:
要はLFをCRLFに変換したいということですよね
変換は出来たみたいですが、一つ確認していただきたい
その読み込んでいるファイルの改行コードはLFなのですか?
Windows環境で使われるテキストファイルはCRLFが標準です。
しかしCでは伝統的に改行コードはLFなので、
WindowsのCにはCRLFをLFに変換して読み込む
「テキストモード」というのがあります。
テキストモードで読み込んでいませんか?
もしそうなら、何も変換せずに読み込む
「バイナリモード」でファイルをオープンすれば
うまくいくのではないでしょうか
fopenなら"r"ではなく"rb"を指定
CFileならCFile::typeBinaryを指定すればいいのかな?
(MFCはよく知らない)
No.6
- 回答日時:
mydata1[n-1]='\0'; はfgets()の末尾の'\n'をカットするものですよね。
(厳密には'\n'かどうかの検査をすべきと思います)
http://www.bohyoh.com/CandCPP/C/Library/fgets.html
>空の1行を削除するために今回の処理をしています
取得した文字列に改行コードを付加しているので、最後は改行で終わりますね。
これでいかがでしょうか?
for(i=0;;i++){
fgets(mydata1,256,fin);
n=strlen(mydata1);
if(mydata1[n-1]=='\n')
mydata1[n-1]='\0';
if(strcmp(mydata1,"end")){
if(i==0)
m_InputData=mydata1;
else
m_InputData=m_InputData+crlf+mydata1;
}
略
}
参考URL:http://www.bohyoh.com/CandCPP/C/Library/fgets.html
この回答への補足
回答ありがとうございます。
教えて頂いたコードは理解できました。
しかしながら、実際にはテキストファイルに書き込むときに特殊な処理をしているため、教えていただいたコードではエディットボックスに表示するとゴミが付きます。
あああ
いいい・・ ←ゴミの数は適当
それで結局 moji[n-2]='\0' というおかしな処理が必要になりました。
MovingWalkさんのコードの考え方は、今後の参考にさせて頂きたいと思います。
また、最初の質問に戻って、今回知りたかったCStringでの処理の仕方については、yoppiiさんに教えて頂いたことで解決です。
今回の質問はこれで解決、終了にさせて頂きたいと思います。
#今回の質問の内容より前に行っているテキストファイルに書き込む処理を私自身が正確に理解出来ていない為、適確な質問が出来ず申し訳ありませんでした。
自分自身で調べて分からなければ、改めて質問します。
ちなみに、テキストファイルに書き込む時に以下のような感じで処理しています。
aaaa=aaaa+bb+"\x0a"+aaa+"\x0d\x0a"+"end"+crlf;
回答ありがとうございます。
今日は疲れているのでもう寝ます。
(朝型タイプなのですみません)
教えていただいたことは明日また確認して連絡させていただきます。
一応、CStingでのコードは#5の補足に書いた方法でうまく行きました。
結果がうまくいっただけで、細かい分かっていない部分は勉強したいと思います。
No.5
- 回答日時:
#3 のコードで「サンプルプログラムと同じ処理」
が出来るのですが。だめですか?
> 正確には最後から2文字以降を削除したいのですが、
もう一度やりたいことを確認したいのですが,
"ABCDE" が "ABC" になればいいのでしょうか?
日本語の扱いはどうしましょうか?
考慮しなくてもいいですか?
それとも,
"あいうえお" が "あいう" になって欲しいですか?
この回答への補足
参考サイトを調べてようやく出来ました。
m_InputData.Insert(m_InputData.GetLength() - 2, '\0');で同じことが実現でき、実行結果もうまくいきました。
回答ありがとうございます。
適確に疑問点を質問できず、気を使わせて申し訳ありません。
#4のお礼欄にもう少し詳しく質問内容を書いておきました。
これでお分かりでしたら、よろしくお願い致します。
No.4
- 回答日時:
>サンプルプログラムと同じことが出来れば良いです
何のためにサンプルプログラムのようなことが必要なのかをお聞きして
いるんです。サンプルプログラムのままがよければそれでいいはずです。
moji[n-1]='\0'
C文字列の最後の文字を消すってことですよね。
こうすれば、
「CString型の文字の最後の1文字を’¥0’に変更する」
ことになるんですか?(文字サイズが小さくなることとは意味が少し違います)
この回答への補足
すみません。1部訂正です。
<誤り>
あああ
いいい・
<訂正>
あああ
いいい
←空の1行が入る
| ←カーソルの位置
空の1行を削除するために今回の処理をしています。
回答ありがとうございます。
>何のためにサンプルプログラムのようなことが必要なのかをお聞きしているんです。
うまく説明できませんがご容赦ください。
<仕様>
1.テキストファイルから1行づつ読み込む。
2.読み込んだ文字列をエディットボックスに改行して表示できるように、1行読み込む毎に"\x0a"を追加しました。
while(1){
fgets(mydata1,256,fin);
n=strlen(mydata1);
mydata1[n-1]='\0';
if(strcmp(mydata1,"end")){
m_InputData=m_InputData+mydata1+crlf;
}
略
3.実行してみると、最終行にだけゴミ・が付きました。
あああ
いいい・
4.そのゴミを取るために、次のようにしました。
CString m_InputData;
char moji[100];
int n;
strcpy(moji,m_InputData);
n=strlen(moji);
moji[n-2]='\0' //■n-2です
m_InputData=moji;
>サンプルプログラムのままがよければそれでいいはずです。
もう少しスマートな書き方があるんじゃないかと思いお聞きしました。
これでお分かりでしょうか?
よろしくお願い致します。
No.2
- 回答日時:
回答ありがとうございます。
>結局何をしようとしているのかわかりませんが、
質問が仕方がまずいようですが、勘弁ください。
サンプルプログラムと同じことが出来れば良いです。
よろしくいお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
C言語・C++・C#
-
-
4
文字列の置換をCStringで(C++)
C言語・C++・C#
-
5
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
6
CString から LPCTSTRの型に変換
C言語・C++・C#
-
7
ラベル(スタティックテキスト)内での改行。
C言語・C++・C#
-
8
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
9
CString型 全角半角を意識せずに「1文字」ずつ取り出す
C言語・C++・C#
-
10
エディットコントロールでEnter押した時の動作
C言語・C++・C#
-
11
画面を強制的に再描画させる方法
C言語・C++・C#
-
12
テキストボックスからフォーカス外す
C言語・C++・C#
-
13
CStringの中から数字だけの場合と、その他が含まれる場合を識別する方法
C言語・C++・C#
-
14
CStringをwchar_tに変換したい
C言語・C++・C#
-
15
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
16
エディットボックスの入力制限について
C言語・C++・C#
-
17
ビジュアルC++でボタンの有効/無効
C言語・C++・C#
-
18
ダイアログ表示時にチェックボックスにチェックされている状態にするには?
C言語・C++・C#
-
19
CStringについて
C言語・C++・C#
-
20
charからLPTSTRへの変換方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C/C++言語で日本語処理
-
sscanfとscanfの違いがよくわか...
-
CStringのFindで文字列検索を行...
-
小文字のみを数える方法
-
文字列中に含まれる文字の個数...
-
Cで「大文字、小文字の判定」は...
-
作ったプログラミングC何だけど...
-
1行の文字列を時間差で表示する...
-
やはり文字コードのせいでしょ...
-
C言語のステップ数をカウントす...
-
C言語、単語ごとに改行したい
-
C言語 文字列の操作
-
charと%c , %s の関係について
-
反転した数値を表示させるやり方
-
メニューバーでクリックした個...
-
C++
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
10個出力で改行したいのですが...
-
CTRL+Dでループを抜けるには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
fgetsで拾われる改行文字を削除...
-
itoaわかりません
-
sscanfとscanfの違いがよくわか...
-
Cで「大文字、小文字の判定」は...
-
C言語のステップ数をカウントす...
-
fgets関数を使用したときの文字...
-
CStringについて
-
ブランクのチェック
-
単語数のカウントについて
-
C言語 空白の行(改行のみ)が...
-
C言語で可変長から固定長に変換...
-
文字列中に含まれる文字の個数...
-
反転した数値を表示させるやり方
-
fgetsとsscanfを使って一行から...
-
C++
-
メニューバーでクリックした個...
-
fgetsの用法について
-
文字列の途中に「0」がある場...
-
かぶった文字を消すプログラム
おすすめ情報