質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

4回答

396閲覧

c# 書式指定文字列を文字列の配列にいれる

obokado

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2017/10/18 02:38

###前提・実現したいこと
テキストファイルが特定の書式で書かれているのでそれを読み取りそれを解析したいです。
フォーマットは
{0,-6}{1,5}{2,8}{3,8}{4,5}
でテキストファイルに保存されています。

AAA 123 12.34 123.45 12 BBB 1234 34.56 12.00 11 CCC 01 126.00 1.00 33

###サンプルのソースコード
外套の文字列を見つけて、外套の文字列を含む文字列をargsに入れたい。

StreamReader sr = File.OpenText(path); String line = null; String searchString = "AAA"; while (!sr.EndOfStream) { line = sr.ReadLine(); if (line.Contains(searchString)) { break; } line = null; } String[] args = ;/*lineに指定の書式で文字列が入れられているのでそれを配列にいれたい*/

以下、argsに入ってほしい内容

args[0] → AAA args[1] → 123 args[2] → 12.34 args[3] → 123.45 args[4] → 12

###試したこと
あほですが、line.Split(' ');では思った内容になりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

RemoveEmptyEntries オプションを使用するのはいかがでしょう。

C#

1char[] splitters = { ' ' }; 2var args = line.Split(splitters, System.StringSplitOptions.RemoveEmptyEntries);

投稿2017/10/18 05:05

neelabo

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

固定長である前提で回答を記載します。簡単に言えば、Listにデータを格納してLinqで検索しては如何かという提案です。
まず、下記の様なクラスを定義して…

C#

1 class hogeClass 2 { 3 //文字データを格納するクラス 4 public String col1; 5 public int col2; 6 public double col3; 7 public double col4; 8 public String col5; 9 }

下記の処理を記述(ボタンを押したら、データを読んでメッセージボックスを表示しています

C#

1 private void button1_Click(object sender, EventArgs e) 2 { 3 //テストデータを準備 4 String[] strArg = new string[4]; 5 strArg[0] = "AAA 123 12.34 123.45 12"; 6 strArg[1] = "BBB 1234 34.56 12.00 11"; 7 strArg[2] = "CCC 01 126.00 1.00 33"; 8 strArg[3] = "AAA 01 126.00 1.00 99"; 9 10 //ここで要素を配列化する 11 List<hogeClass> lhoge = new List<hogeClass>(); 12 foreach(String str in strArg) 13 { 14         //固定長データをSubstringで切ってListに格納する 15 hogeClass hoge = new hogeClass(); 16 hoge.col1 = str.Substring(0, 6).Trim(); 17 hoge.col2 = Int32.Parse(str.Substring(6,5).Trim()); 18 hoge.col3 = double.Parse(str.Substring(11, 8).Trim()); 19 hoge.col4 = double.Parse(str.Substring(19, 8).Trim()); 20 hoge.col5 = str.Substring(27, 5).Trim(); 21 lhoge.Add(hoge); 22 } 23 //Linqで検索する 24 IEnumerable<hogeClass> result = lhoge.Where(x=>x.col1.Equals("AAA")); 25 //正しく検索できたことを確認する為、メッセージボックスを表示。この場合は、12と99がメッセージボックスに表示される 26 result.ToList().ForEach(x => MessageBox.Show(x.col5)); 27 28 29 }

投稿2017/10/18 04:24

motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

文字列の指定した箇所のみを取得するSubstringメソッドを利用するとよいでしょう。
たとえば以下のように利用します。

C#

1String line = "AAA 123 12.34 123.45 12"; 2Console.WriteLine(line.Substring(6, 5)); // 6文字目から5文字…つまり" 123"が取得される

投稿2017/10/18 04:21

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

{0,-6}~の意味が分かりませんが、固定長ファイルのことですかね?
検索すればいろいろと出てくるとは思いますが、VBのTextFieldParserを使うのが簡単ではないでしょうか?

https://webbibouroku.com/Blog/Article/textfieldparser-fixwidth

投稿2017/10/18 04:18

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問