C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

配列の指定箇所だけを,新しい配列に入れる

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■87715 / inTopicNo.1)  配列の指定箇所だけを,新しい配列に入れる
  
□投稿者/ opp (1回)-(2018/06/22(Fri) 18:27:48)

分類:[.NET 全般] 

初めまして、Vb.netで開発を始めて
間もないです


ご質問いたします

a,b,c
a,b,c,c
a,b,c,c,c

Stringの配列があります

a,bまでは要らなくて
,c
,c,c
,c,c,c

カンマからcの所全部を
新しい配列に取得したいのですが

どうやるのかさっぱりわかりません
よろしくお願い致します。

引用返信 編集キー/
■87716 / inTopicNo.2)  Re[1]: 配列の指定箇所だけを,新しい配列に入れる
□投稿者/ WebSurfer (1530回)-(2018/06/22(Fri) 18:50:43)
No87715 (opp さん) に返信

> どうやるのかさっぱりわかりません

自分も質問の内容から質問者さんが何をしたいのかさっぱり分かりません。

単純に最初が a, b となっていたらそれを取り除けばいいのか、中身の文字列は不定でとにかく
配列の中の最初の 2 つが不要なのか、数は不定で要素の中身で不要なものを判断して取り除く
のか・・・

丸投げしないで調べまくってコードを書く努力をしてください。それをアップしてもらうと詳し
く説明しなくても回答者・閲覧者に分かってもらえるかもしれません。
引用返信 編集キー/
■87717 / inTopicNo.3)  Re[2]: 配列の指定箇所だけを,新しい配列に入れる
□投稿者/ opp (2回)-(2018/06/22(Fri) 19:26:52)
No87716 (WebSurfer さん) に返信
> ■No87715 (opp さん) に返信
>

やったことを載せるまで考えてませんでした
ご指導ありがとうございます

自分が試みたのは

a,bの部分を削除を試みました

For i As Integer = 0 To load_file.Length - 1
Dim tmp As String = load_file(i).Split(","c)(2)
Log(i) = tmp
Next

とやってみましたが これではできません

For i As Integer = 0 To load_file.Length - 1
Dim tmp As String = load_file(i).substring(0,5)
Log(i) = tmp
Next

aは0,4で要らないですが、bの文字列が必ずしも1文字じゃないので、指定はできません
removeも試しましたがだめでした


引用返信 編集キー/
■87718 / inTopicNo.4)  Re[3]: 配列の指定箇所だけを,新しい配列に入れる
□投稿者/ 名無し (1回)-(2018/06/22(Fri) 22:03:47)
No87717 (opp さん) に返信

Sub Main()
    Dim lines = {
        "a,b,c",
        "a,b,c,c",
        "a,b,c,c,c"
        }

    For Each line In lines
        Dim values = line.Split(","c).SkipWhile(Function(i) {"a", "b"}.Contains(i))
        Diagnostics.Debug.WriteLine(String.Join(",", values))
    Next
End Sub

こういうこと?

引用返信 編集キー/
■87719 / inTopicNo.5)  Re[3]: 配列の指定箇所だけを,新しい配列に入れる
□投稿者/ Jitta (381回)-(2018/06/23(Sat) 19:15:25)
なんか、本当に必要な事が書けてる?
カンマ区切りの3列目以降だけ要る、なんじゃないの?
split して2からcount まで取り出せばいいよね。
引用返信 編集キー/
■87721 / inTopicNo.6)  Re[4]: 配列の指定箇所だけを,新しい配列に入れる
□投稿者/ Opp (1回)-(2018/06/25(Mon) 10:03:34)
No87719 (Jitta さん) に返信
> なんか、本当に必要な事が書けてる?
> カンマ区切りの3列目以降だけ要る、なんじゃないの?
> split して2からcount まで取り出せばいいよね。

ご返信ありがとうございます

Jiitaさんの言うとおり
それがしたいですね・・


For i As Integer = 0 To load_file.Length - 1
Dim tmp As String = load_file(i).Split(","c)(2,load_files.Length-1)
Log(i) = tmp
Next

のように第二引数とかでしょうか
ただ、c部分は全ての行に無い場合もあるので
Index境界外の処理も
Tryなりで入れなければいけないのか??
それか違う処理の仕方が

初心者には頭が痛いです。。
引用返信 編集キー/
■87722 / inTopicNo.7)  Re[5]: 配列の指定箇所だけを,新しい配列に入れる
□投稿者/ 774RR (612回)-(2018/06/25(Mon) 11:57:55)
コードをいきなり書く前に仕様整理するのが大事。

仕様0.カンマ記号を区切りとして、「項目」を分ける
仕様1.項目3つ目以後がもしあれば、3つ目以後を取り出す
ab,bc,cd,de → cd,de
xxx,yyy,zzz → zzz
まではここまでの話でとりあえず合意があるわけだけど

仕様2.項目2つ以下の場合どうする?については質問者が決めなきゃ。
・その行は抽出しない→入力10行に対して出力3行とかを容認する
・空行を抽出する(入出力で行数が同じでないといけない場合の話)
・「デフォルト出力」を返す
・不正入力なので例外を上位に投げる
・その他
どれがお望み? それを決めた後だよ、実コード書くのは。
引用返信 編集キー/
■87723 / inTopicNo.8)  Re[6]: 配列の指定箇所だけを,新しい配列に入れる
□投稿者/ Opp (2回)-(2018/06/25(Mon) 12:15:12)
No87722 (774RR さん) に返信

詳しくありがとうございます

ab,bc,cd,de → cd,de
xxx,yyy,zzz → zzz

のように 2以降だけ取得したいので
・その行は抽出しない→入力10行に対して出力3行とかを容認する です
無い場合は、何も無いという風にしたいので(後々入ってくるので・・)







引用返信 編集キー/
■87733 / inTopicNo.9)  Re[7]: 配列の指定箇所だけを,新しい配列に入れる
□投稿者/ Jitta (383回)-(2018/06/25(Mon) 18:57:48)
No87723 (Opp さん) に返信

なんかやってる事が No87708 に似てるんだけど、
あっちの下の方に書いた事だけど、
いっぺんに全部しようとするのではなく、
一つ一つ確実にこなしましょう。

> For i As Integer = 0 To load_file.Length - 1
> Dim tmp As String = load_file(i).Split(","c)(2,load_files.Length-1)

Pythonの経験がおありですか?
Pythonではリストなどで[1:4]とすると1から4ですが、
VBには該当するものはなかったはず。
きちんとFor文で回して下さい。

それと、load_file.Lengthは、行数ですよね。
ここでは、カンマで分割してできた配列の要素2以降ですよ。
引用返信 編集キー/
■87736 / inTopicNo.10)  Re[7]: 配列の指定箇所だけを,新しい配列に入れる
□投稿者/ shu (1125回)-(2018/06/26(Tue) 09:01:09)
No87723 (Opp さん) に返信
> ■No87722 (774RR さん) に返信
> 
> 詳しくありがとうございます
> 
> ab,bc,cd,de → cd,de
> xxx,yyy,zzz → zzz
> 
> のように 2以降だけ取得したいので
> ・その行は抽出しない→入力10行に対して出力3行とかを容認する です
> 無い場合は、何も無いという風にしたいので(後々入ってくるので・・)
> 

        Dim sample = {"a,b,c",
                      "a,b,c,c",
                      "a",
                      "x,y,c",
                      "z,b,d"}

        Dim result = (From line In sample
                      Select values = line.Split(","c)
                      Where values.Length > 2
                      Select values.Skip(2).ToArray).ToArray

こんな感じの処理でしょうか?

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ