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

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

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

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

509閲覧

文字列を抜き出す方法について

takeshi1907

総合スコア54

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/03/26 05:37

編集2019/03/26 05:41

以下のようなテキストファイルに書かれた文字列から 「'」から「'」 の間の文字列を一行ずつ抜き出したいと考えています。

以下テキストファイル
↓ここから
return_to_login: 'Return to login'
click_here_to_reset_password: 'Click here to reset your password'
reset_password_email_subject: 'Your Password Reset Link'
reset_password: 'Reset Password'
confirm_password: 'Confirm password'
↑ここまで

例えば1行目の「return_to_login: 'Return to login'」の場合は「Return to login」の部分だけを抜き出したく思います。

テキストは合計で1000行ほどあります。

この場合どのようなプログラムを書けば良いでしょうか?
色々調べたのですが、求めている情報が出てこなく質問致しました。
Swiftかobj-cで考えています。

宜しくお願いします。

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

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

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

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

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

fuzzball

2019/03/26 05:46

' と ' で囲まれた文字列の中に ' が含まれないことは保証されていますか?
MasakiHori

2019/03/26 06:11

field = key , separator , value , newline key = alphabet | "_" separator = ": " value = "'" , description , "'" description = alphabet | whiteSpace という決まりがあるならそんなに難しくないですよ 行分割後各行を ": " で分割して、2つ目の値の頭とおしりを削除するだけなので。 description の条件が厳しすぎるので実際のテキストファイルで使えるかどうかはわかりませんが
takeshi1907

2019/03/26 06:15

>' と ' で囲まれた文字列の中に ' が含まれないことは保証されていますか? はい、' と 'の中には ' は含まれません。
takeshi1907

2019/03/26 06:25

> MasakiHori ありがとうございます。 分割して余計なものを消してしまえば良いのですね。 その方法を試してみたいと思います。
guest

回答2

0

行分割後各行を ": " で分割して、2つ目の値の頭とおしりを削除する方法で解決しました。
以下、Obj-Cで書きました。

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"txt"]; NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; // 1行ずつ文字列を列挙 [str enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) { NSArray *phrases = [line componentsSeparatedByString:@":"]; NSString *r = [phrases[1] stringByReplacingOccurrencesOfString: @"'" withString: @""]; NSLog(@"%@", r); }];

MasakiHori さんありがとうございました。

投稿2019/03/26 06:32

編集2019/03/26 06:33
takeshi1907

総合スコア54

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

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

0

ベストアンサー

正規表現でいけると思うので、

  • 正規表現で文字列を抽出する方法を調べる
  • Objective-C or Swiftで正規表現を扱う方法を調べる

で解決すると思います。

【追記】

せっかくなのでObjective-Cで作ってみました。

objectivec

1NSString *text = @ 2"return_to_login: 'Return to login'\n" 3"click_here_to_reset_password: 'Click here to reset your password'\n" 4"reset_password_email_subject: 'Your Password Reset Link'\n" 5"reset_password: 'Reset Password'\n" 6"confirm_password: 'Confirm password'\n" 7; 8 9NSError *error; 10NSRegularExpression *expr = [NSRegularExpression regularExpressionWithPattern:@"'([^']*)'" options:0 error:&error]; 11if (error == nil) { 12 [expr enumerateMatchesInString:text options:0 range:NSMakeRange(0, text.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 13 NSLog(@"%@", [text substringWithRange:[result rangeAtIndex:1]]); 14 }]; 15}

text

1Return to login 2Click here to reset your password 3Your Password Reset Link 4Reset Password 5Confirm password

投稿2019/03/26 05:49

編集2019/03/26 07:38
fuzzball

総合スコア16731

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

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

takeshi1907

2019/03/27 06:27

コードまで書いていただきまして、ありがとうございます。 こちらの方がシンプルに記述ができて良いですね。 正規表現についてあまり知識がなかったのですが、この機会に勉強してみようかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問