タブや改行文字の削除

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ひろ

タブや改行文字の削除

#1

投稿記事 by ひろ » 18年前

Visual Studio 2003.NETを使って、Visual C++でプログラムを組んでいます。

あるString文字列があるのですが、その末端に、いくつかのタブや改行文字が入ってしまい、
ファイルに保存するときに困ったので、そのタブや改行文字を消す方法を考えています。

下に、今のソースを書いてみました。この部分では、タブを消そうとしています。



String *temp; //この文字列の末端にタブや改行文字が入ってしまう。

while(temp->EndsWith("\t")){ //tempの最後がタブで終わっている限り繰り返す?
temp->Remove(temp->Length - 2, 2); //tempの文字数から2引いた位置から2文字消す(最後の2文字を消す)
}



こんな感じにしてみましたが、どうやらwhileから抜けられないらしく、フリーズしてしまいます。

このような条件文ではいけないのでしょうか?簡単な質問でしたら申し訳ないです。

ベリ工

Re:タブや改行文字の削除

#2

投稿記事 by ベリ工 » 18年前

>String *temp; //この文字列の末端にタブや改行文字が入ってしまう。
>
>while(temp->EndsWith("\t")){ //tempの最後がタブで終わっている限り繰り返す?
>temp->Remove(temp->Length - 2, 2); //tempの文字数から2引いた位置から2文字消す(最後の2文字を消す)
>}
>
>こんな感じにしてみましたが、どうやらwhileから抜けられないらしく、フリーズしてしまいます。

temp->Remove(temp->Length - 2, 2);
ではなく
temp = temp->Remove(temp->Length - 2, 2);
では?

また、\tは2文字ではなく1文字分では?
つまり
temp = temp->Remove(temp->Length - 1, 1);
ではないですか?

また、
while(temp->EndsWith("\t"))
としてますが、whileループする必要性が見受けられません。単純に

if ( temp->EndsWith("\t") ) {
temp = temp->Remove(temp->Length - 1, 1);
}

とすれば良いのでは?

ベリ工

Re:タブや改行文字の削除

#3

投稿記事 by ベリ工 » 18年前

訂正します。
>while(temp->EndsWith("\t"))
>としてますが、whileループする必要性が見受けられません。
は、
複数のタブが連続した場合はループする必要がありますね。
例えば
temp = "あいうえお\t\t\t";
など・・・。

まぁ、それでしたら
if ( temp->Trim()->Length > 0 ) {
temp = temp->Substring(0, temp->IndexOf("\t"));
}
でも良いかもしれませんね(未確認ですが)。

ひろ

Re:タブや改行文字の削除

#4

投稿記事 by ひろ » 18年前

ありがとうございました!無事タブが消えました。

しかし、改行文字が消えません(汗
改行は"\n"か、Environment::NewLineかと思っていたのですが、どうやら違うみたいです…。



それと、関係ないことを合わせて質問してしまって申し訳ないのですが、
ListViewでインデックスをint型でとりたい場合はどうすればいいのでしょうか?

ListBoxの、SelectedIndexのような感じです。
SelectedIndicesというメソッドでは、違う型で取得してしまうので…。
重ね重ね質問してすいません。

ベリ工

Re:タブや改行文字の削除

#5

投稿記事 by ベリ工 » 18年前

>しかし、改行文字が消えません(汗
>改行は"\n"か、Environment::NewLineかと思っていたのですが、どうやら違うみたいです…。
以下のようにサンプル的に実行しましたが改行"\n"でもちゃんと動作しましたが?
String    *strWork = S"あいうえお\n";

if ( strWork->EndsWith(S"\n") ) {
    strWork = strWork->Remove(strWork->Length - 1, 1);
}
>ListBoxの、SelectedIndexのような感じです。
>SelectedIndicesというメソッドでは、違う型で取得してしまうので…。
MSDNヘルプ見ました?
以下MSDNから

選択された項目のインデックスを格納している ListView.SelectedIndexCollection 。項目が現在選択されていない場合は、空の ListView.SelectedIndexCollection が返されます。

とあります。なのでSelectedIndexCollectionを調べれば良いです。
SelectedIndexCollectionをMSDNで調べると

リスト ビュー コントロール内で選択されている項目のインデックスを格納するコレクションを表します。

と書いてあります。なのでSelectedIndexCollectionのItemの値が
ListBoxのSelectedIndexに相当すると捉えることができますよね?

あとはListViewのItemにSelectedIndexCollectionのItemを与えると
リストビューコントロール内で選択されている"値そのもの"が取得できるのではないでしょうか?
未確認なので分かりませんが、MSDN読んだ限りではそんな感じで使用するように見えました。

あとはご自分で確認されてください。

ひろ

Re:タブや改行文字の削除

#6

投稿記事 by ひろ » 18年前

返事が遅れてごめんなさい…。

早速やってみます!
分かり易い説明、本当にありがとうございました!

ひろ

Re:タブや改行文字の削除

#7

投稿記事 by ひろ » 18年前

解決にするのを忘れてました…すいません(汗)

閉鎖

“C言語何でも質問掲示板” へ戻る