素人で間違っているかもしれませんが、String::Splitは wchar_tのように1文字だけしか使えないので、\r\nのような2文字以上のデリミタに対応しているperlのsplit関数みたいのを探しています。
以下のソースで※ここですの部分で、2文字以上の任意のデリミタでマージ型文字列を配列にしたいです。
.NETは覚えたてですが、Vista以降でも廃れることは無いのでしょうか?
覚えて無意味はきついので・・・
/*
VC++2005でperlのようなsplit関数を実現したい
区切り文字は\r\n
*/
using namespace System;
int main( array<String^>^ args ){
String^ str = nullptr;
if (1 > args->Length ){
str = "太郎\r\n花子\\純一郎";
} else {
str = args[0];
}
// strマージ文字列をPerlのsplit関数のようなもので、以下のようなnamesを作成したい。
// $names = split /\r\n/ $str; <=※ここです。
array<String^> ^names = { "太郎", "花子", "純一郎" };
String^ name;
for each ( name in names ) {
Console::WriteLine("{0}", name);
}
return 0;
}
No.1ベストアンサー
- 回答日時:
String.Split メソッド (String[], StringSplitOptions) のタイプでメソッド使えば可能ですよ
array<string^>^separator = {L"\r\n"};
names = str->Split( separator, System::SptringSplitOptions::RemoveEmptyEntries);
Console::WriteLine( L"{0}", names->Length );
for each ( name in names ) {
Console::WriteLine( L"{0}", name );
}
といった具合です
この回答への補足
ご指摘どおり、以下のように修正して動作しました。
ありがとうございました。
しかし、コマンドラインで test a\r\nb\r\ncとした場合、splitせず
そのままa\r\nb\r\ncと表示されます。
str = L{args[0]};とする必要があるのでしょうか?
/*
VC++2005でperlのようなsplit関数を実現したい
区切り文字は\r\n
*/
using namespace System;
int main( array<String^>^ args ){
String^ str = nullptr;
if (1 > args->Length ){
str = "太郎\r\n花子\r\n純一郎";
} else {
str = args[0];
}
array<String^>^separator = {L"\r\n"};
//array<String^> ^names = { "太郎", "花子", "純一郎" };
array<String^>^names = str->Split( separator, System::StringSplitOptions::RemoveEmptyEntries);
String^ name;
for each ( name in names ) {
Console::WriteLine("{0}", name);
}
return 0;
}
No.2
- 回答日時:
>しかし、コマンドラインで test a\r\nb\r\ncとした場合、splitせず
コマンドラインで \r\nと与えても Cで扱う CRやLFには変換されません
もし \r\nの文字列を区切りとして与えるのであれば C側でエンコードしてあげましょう
if ( args.Length < 1 ) {
str = L"デバッグ\r\n用文字\r\n列\r\n"
} else {
str = argv[0];
// "\r" -> '\r'変換
str = str.Replase( L"\\r", L"\r" );
// "\n" -> '\n'変換
str = str.Replase( L"\\n", L"\n" );
}
といった具合でしょう …
この回答への補足
以下でうまくいきました。
ありがとうございました。
// "\r" → '\r'変換
str = str->Replace( L"\\r", L"\r" );
// "\n" → '\n'変換
str = str->Replace( L"\\n", L"\n" );
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数値をASCII文字にする方法につ...
-
c言語 文字 - '1'+26
-
マクロで半角を全角に
-
16進数の文字列をアスキーコー...
-
16進数を2進数に変換するコード...
-
マージ型文字列のデリミタ2文...
-
文字数が決まっていないの文字...
-
携帯サイトの絵文字の互換性に...
-
VC++ マルチバイト文字とUniCod...
-
REGEXREPLACE関数について、
-
VBAのコマンドボタンの文字列の...
-
エスケープ文字の復帰(¥r)と...
-
C++で空Enterの入力を判...
-
テキストボックス行の桁数を制...
-
ダブルコーテーション(
-
ソースコードの1行が長いとき...
-
改行コードについて
-
文字の入力で横バー上段、中断...
-
全角括弧と全角読点の間隔を狭...
-
C言語の標準入力で改行しない方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマの含まれる文字列の数値...
-
数値をASCII文字にする方法につ...
-
16進数の文字列をアスキーコー...
-
fgetws関数で読み込んだUNICODE...
-
1バイト文字の上位4ビット・...
-
マクロで半角を全角に
-
VC++ マルチバイト文字とUniCod...
-
ヌル文字とは一体何でしょうか
-
VB6.0 Base64のデコード方法を...
-
VBA ASC関数で変換できない文...
-
preg_replaceがうまくできない
-
外字を削除したい
-
文字数が決まっていないの文字...
-
サロゲートペア文字の半角カナ...
-
携帯の絵文字について
-
VB6 機種依存文字の変換
-
テキストエディタで特定の文字...
-
i-modeの絵文字をパソコンで再現
-
PHP 日付フォーマット
-
16進数の文字列を10進数の数値...
おすすめ情報