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

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

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

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

Q&A

解決済

1回答

592閲覧

Luaでsplit関数を自作したがうまく動かない

Funa-teratail

総合スコア13

Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

0グッド

0クリップ

投稿2022/12/29 01:56

編集2022/12/29 02:52

前提

Luaでsplit関数を自作しようと正規表現を使わない簡単な関数を作ってみましたが空白を返すだけでうまく動きません。

実現したいこと

  • 第一引数を第二引数で分割したい
    • split("a-b-c","-","2") --bを返す

発生している問題・エラーメッセージ

空白を返す

該当のソースコード

lua

1function split(str,a,b) 2 local after={} 3 local text="" 4 for i=1,#str do 5 if (string.sub(str,i,i) == a) then 6 after[i]=text 7 text="" 8 else 9 text=text..string.sub(str,i,i) 10 end 11 end 12 return after[tonumber(b)] --環境の都合上引数bは文字列で渡されます 13end

試したこと

  • bを数字にして実行

補足情報(FW/ツールのバージョンなど)

開発環境はMediaWikiのモジュール。

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

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

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

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

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

ozwk

2022/12/29 02:34

for i=1,str do -- str ?
Funa-teratail

2022/12/29 02:51

# 付け忘れでした。 修正します
Funa-teratail

2022/12/29 02:53

因みにこれでも動きません
guest

回答1

0

ベストアンサー

lua

1function split(str, sep, idx) 2 local splitted = {} 3 local pre = 0 4 for i=1, #str do 5 if (string.sub(str, i, i) == sep) then 6 table.insert(splitted, string.sub(str, pre, i-1)) 7 pre = i + 1 8 end 9 end 10 table.insert(splitted, string.sub(str, pre, #str)) 11 return splitted[tonumber(idx)] 12end 13 14print(split("a-b-c", "-", "2")) 15 16# b

投稿2022/12/29 03:03

編集2022/12/29 03:05
melian

総合スコア19805

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

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

Funa-teratail

2022/12/29 03:34

動きました!ありがとうございます。insertを使うのですね
melian

2022/12/29 04:10

はい、ご自由にどうぞ。ただ、回答したコードは文字列から配列を作成しているので効率があまりよろしくありません。
Funa-teratail

2022/12/29 04:15

では、使わせていただきます。改めてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問