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:タブや改行文字の削除
>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);
}
とすれば良いのでは?
>
>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:タブや改行文字の削除
訂正します。
>while(temp->EndsWith("\t"))
>としてますが、whileループする必要性が見受けられません。
は、
複数のタブが連続した場合はループする必要がありますね。
例えば
temp = "あいうえお\t\t\t";
など・・・。
まぁ、それでしたら
if ( temp->Trim()->Length > 0 ) {
temp = temp->Substring(0, temp->IndexOf("\t"));
}
でも良いかもしれませんね(未確認ですが)。
>while(temp->EndsWith("\t"))
>としてますが、whileループする必要性が見受けられません。
は、
複数のタブが連続した場合はループする必要がありますね。
例えば
temp = "あいうえお\t\t\t";
など・・・。
まぁ、それでしたら
if ( temp->Trim()->Length > 0 ) {
temp = temp->Substring(0, temp->IndexOf("\t"));
}
でも良いかもしれませんね(未確認ですが)。
Re:タブや改行文字の削除
ありがとうございました!無事タブが消えました。
しかし、改行文字が消えません(汗
改行は"\n"か、Environment::NewLineかと思っていたのですが、どうやら違うみたいです…。
それと、関係ないことを合わせて質問してしまって申し訳ないのですが、
ListViewでインデックスをint型でとりたい場合はどうすればいいのでしょうか?
ListBoxの、SelectedIndexのような感じです。
SelectedIndicesというメソッドでは、違う型で取得してしまうので…。
重ね重ね質問してすいません。
しかし、改行文字が消えません(汗
改行は"\n"か、Environment::NewLineかと思っていたのですが、どうやら違うみたいです…。
それと、関係ないことを合わせて質問してしまって申し訳ないのですが、
ListViewでインデックスをint型でとりたい場合はどうすればいいのでしょうか?
ListBoxの、SelectedIndexのような感じです。
SelectedIndicesというメソッドでは、違う型で取得してしまうので…。
重ね重ね質問してすいません。
Re:タブや改行文字の削除
>しかし、改行文字が消えません(汗
>改行は"\n"か、Environment::NewLineかと思っていたのですが、どうやら違うみたいです…。
以下のようにサンプル的に実行しましたが改行"\n"でもちゃんと動作しましたが?
>SelectedIndicesというメソッドでは、違う型で取得してしまうので…。
MSDNヘルプ見ました?
以下MSDNから
選択された項目のインデックスを格納している ListView.SelectedIndexCollection 。項目が現在選択されていない場合は、空の ListView.SelectedIndexCollection が返されます。
とあります。なのでSelectedIndexCollectionを調べれば良いです。
SelectedIndexCollectionをMSDNで調べると
リスト ビュー コントロール内で選択されている項目のインデックスを格納するコレクションを表します。
と書いてあります。なのでSelectedIndexCollectionのItemの値が
ListBoxのSelectedIndexに相当すると捉えることができますよね?
あとはListViewのItemにSelectedIndexCollectionのItemを与えると
リストビューコントロール内で選択されている"値そのもの"が取得できるのではないでしょうか?
未確認なので分かりませんが、MSDN読んだ限りではそんな感じで使用するように見えました。
あとはご自分で確認されてください。
>改行は"\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読んだ限りではそんな感じで使用するように見えました。
あとはご自分で確認されてください。