トップ回答者
Split関数について

質問
-
string swk1, swk2
string[] sdata;
swk1 = "丸中太郎 15,000円";
sdata = swk1.Split( ',' );
swk2 = "";
for ( int i = 0; i < sdata.Length; i++ )
{
swk2 = swk2 + '[' + sdata[ i ] + ']';
}
MessageBox.Show( swk2 );
[丸中太郎 15][000円]
と表示されます。カンマで区切れと私が指定しているのでしかたないのでしょうけど。
CSVの場合、ダブルクォーテーションで囲めば1項目になるのでは、ないのでしょうか?
[丸中太郎 15,000円]
と表示させる方法を どなたか 教えてください。
回答
-
TextFieldParserのコンストラクタはファイル名の他にstreamやTextReaderでもOKなので、今回の場合にも使えるかと。
-
Split???????????????????512???????????
C++6.0????????????? Split??????????
aaa,"bb 150,000,000",bbb
?
[aaa]["bb 150,000,000"][bbb]
private string[] m_sItem = new string[ 512 ];
public int UsParser( string s )
{
//throw new System.NotImplementedException();
string[] sitem;
string sdata, sst, sen;
int i, ia, iitem, icount, ilen, ist, ien;
iitem = 0;
if ( s == null || s == "" )
{
return iitem;
}
sitem = s.Split( ',' );
icount = sitem.Length;
if ( icount >= 512 )
{
MessageBox.Show( "?? 512 ????" );
return -1;
}
for ( i = 0; i < 512; i++ )
{
m_sItem[ i ] = "";
}
i = 0;
ia = 0;
ist = 0;
ien = 0;
while( true )
{
if ( i >= icount )
{
break;
}
sdata = sitem[ i ];
i++;
ilen = sdata.Length - 1;
sst = sdata.Substring( 0, 1 );
sen = sdata.Substring( ilen, 1 );
if ( sst == "\x22" && sen != "\x22" ) // ???? "
{
ist = 1;
}
if ( sst != "\x22" && sen == "\x22" ) // ??? "
{
ien = 1;
}
if ( ist > 0 && ien == 0 )
{
m_sItem[ ia ] = m_sItem[ ia ] + sdata + ',';
continue;
}
if ( ien > 0 )
{
m_sItem[ ia ] = m_sItem[ ia ] + sdata;
ia++;
ist = 0;
ien = 0;
continue;
}
m_sItem[ ia ] = sdata;
ia++;
} // while( true )
return ia;
}??????????? 8?????
-
文字化けしているみたいなので、もう一回書きます。
せっかく、Splitがカンマで分けてくれるので、利用してみました。
string s に 分解したい文字列を入れたら、件数が 返ってきます。要素はm_sItem[ i ]に入ります。
s = aaa,"丸中太郎 150,000,000円",bbb
で 件数 3 、m_sItem[ 1 ] = "丸中太郎 150,000,000円"; となります。
public int UsParser( string s )
{
//throw new System.NotImplementedException();
string[] sitem;
string sdata, sst, sen;
int i, ia, iitem, icount, ilen, ist, ien;
iitem = 0;
if ( s == null || s == "" )
{
return iitem;
}
sitem = s.Split( ',' );
icount = sitem.Length;
if ( icount >= 512 )
{
MessageBox.Show( "件数 512 オーバー" );
return -1;
}
for ( i = 0; i < 512; i++ )
{
m_sItem[ i ] = "";
}
i = 0;
ia = 0;
ist = 0;
ien = 0;
while( true )
{
if ( i >= icount )
{
break;
}
sdata = sitem[ i ];
i++;
ilen = sdata.Length - 1;
sst = sdata.Substring( 0, 1 );
sen = sdata.Substring( ilen, 1 );
if ( sst == "\x22" && sen != "\x22" ) // 開始 が "
{
ist = 1;
}
if ( sst != "\x22" && sen == "\x22" ) // 終了 が "
{
ien = 1;
}
if ( ist > 0 && ien == 0 )
{
m_sItem[ ia ] = m_sItem[ ia ] + sdata + ',';
continue;
}
if ( ien > 0 )
{
m_sItem[ ia ] = m_sItem[ ia ] + sdata;
ia++;
ist = 0;
ien = 0;
continue;
}
m_sItem[ ia ] = sdata;
ia++;
} // while( true )
return ia;
}
すべての返信
-
TextFieldParserのコンストラクタはファイル名の他にstreamやTextReaderでもOKなので、今回の場合にも使えるかと。
-
-
Split???????????????????512???????????
C++6.0????????????? Split??????????
aaa,"bb 150,000,000",bbb
?
[aaa]["bb 150,000,000"][bbb]
private string[] m_sItem = new string[ 512 ];
public int UsParser( string s )
{
//throw new System.NotImplementedException();
string[] sitem;
string sdata, sst, sen;
int i, ia, iitem, icount, ilen, ist, ien;
iitem = 0;
if ( s == null || s == "" )
{
return iitem;
}
sitem = s.Split( ',' );
icount = sitem.Length;
if ( icount >= 512 )
{
MessageBox.Show( "?? 512 ????" );
return -1;
}
for ( i = 0; i < 512; i++ )
{
m_sItem[ i ] = "";
}
i = 0;
ia = 0;
ist = 0;
ien = 0;
while( true )
{
if ( i >= icount )
{
break;
}
sdata = sitem[ i ];
i++;
ilen = sdata.Length - 1;
sst = sdata.Substring( 0, 1 );
sen = sdata.Substring( ilen, 1 );
if ( sst == "\x22" && sen != "\x22" ) // ???? "
{
ist = 1;
}
if ( sst != "\x22" && sen == "\x22" ) // ??? "
{
ien = 1;
}
if ( ist > 0 && ien == 0 )
{
m_sItem[ ia ] = m_sItem[ ia ] + sdata + ',';
continue;
}
if ( ien > 0 )
{
m_sItem[ ia ] = m_sItem[ ia ] + sdata;
ia++;
ist = 0;
ien = 0;
continue;
}
m_sItem[ ia ] = sdata;
ia++;
} // while( true )
return ia;
}??????????? 8?????
-
文字化けしているみたいなので、もう一回書きます。
せっかく、Splitがカンマで分けてくれるので、利用してみました。
string s に 分解したい文字列を入れたら、件数が 返ってきます。要素はm_sItem[ i ]に入ります。
s = aaa,"丸中太郎 150,000,000円",bbb
で 件数 3 、m_sItem[ 1 ] = "丸中太郎 150,000,000円"; となります。
public int UsParser( string s )
{
//throw new System.NotImplementedException();
string[] sitem;
string sdata, sst, sen;
int i, ia, iitem, icount, ilen, ist, ien;
iitem = 0;
if ( s == null || s == "" )
{
return iitem;
}
sitem = s.Split( ',' );
icount = sitem.Length;
if ( icount >= 512 )
{
MessageBox.Show( "件数 512 オーバー" );
return -1;
}
for ( i = 0; i < 512; i++ )
{
m_sItem[ i ] = "";
}
i = 0;
ia = 0;
ist = 0;
ien = 0;
while( true )
{
if ( i >= icount )
{
break;
}
sdata = sitem[ i ];
i++;
ilen = sdata.Length - 1;
sst = sdata.Substring( 0, 1 );
sen = sdata.Substring( ilen, 1 );
if ( sst == "\x22" && sen != "\x22" ) // 開始 が "
{
ist = 1;
}
if ( sst != "\x22" && sen == "\x22" ) // 終了 が "
{
ien = 1;
}
if ( ist > 0 && ien == 0 )
{
m_sItem[ ia ] = m_sItem[ ia ] + sdata + ',';
continue;
}
if ( ien > 0 )
{
m_sItem[ ia ] = m_sItem[ ia ] + sdata;
ia++;
ist = 0;
ien = 0;
continue;
}
m_sItem[ ia ] = sdata;
ia++;
} // while( true )
return ia;
}