初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2022-12-30 12:36:29

Alex
Member

1レコードを指定桁、カンマで分割する方法

あるフィールドの1レコードが下記のようになっています。

フィールド0 : AA0001,AA0002,AA03,AB01,AB0002,BB0001,BA0001,CC0002

これを20桁区切りで、かつカンマの間の値が途中で割れないようにレコードを分割して、
別に準備した複数フィールド(MAX5フィールド)に格納したいのですが、
方法が分からず、教えて頂くことは可能でしょうか?

つまりフィールド0のレコードをスクリプトで下記にしたいのです。

フィールド1(20桁まで) : AA0001,AA0002,AA03,
フィールド2(20桁まで) : AB01,AB02,BB0001,
フィールド3(20桁まで) : BA0001,CC0002
フィールド4(20桁まで) : (レコード無し)
フィールド5(20桁まで) : (レコード無し)

フィールド0のレコードが長くて、フィールド5までの20桁に入り切らない場合は、
それ以降の分割レコードは必要としません。

宜しくお願い致します。

Offline

#2 2023-01-01 15:56:39

himadanee
Guest

Re: 1レコードを指定桁、カンマで分割する方法

データの最後はカンマがありませんが、それ以外は(フィールド1のように)末尾のカンマまで必要なんですか?
(カンマを付けると21文字の場合どうするか)

そもそも何のために必要な処理なのか?もっと簡便な方法があるかもしれません。
全部のカンマで分割しないってことは、単なる見た目上の処理のような気がしますが。

#3 2023-01-01 16:43:21

Shin
Member

Re: 1レコードを指定桁、カンマで分割する方法

フィールド1
Let (
    txt = Left ( フィールド0 ; 20 ) ;
    Case (
        Length ( txt ) = 20 ; Left ( txt ; Position ( txt ; "," ; 20 ; -1 ) ) ;
        txt
    )
)

フィールド2
Let (
    txt = Middle ( フィールド0 ; Length ( フィールド1  ) + 1 ; 20 ) ;
    Case (
        Length ( txt ) = 20 ; Left ( txt ; Position ( txt ; "," ; 20 ; -1 ) ) ;
        txt
    )
)

フィールド3
Let (
    txt = Middle ( フィールド0 ; Length ( フィールド1 & フィールド2  ) + 1 ; 20 ) ;
    Case (
        Length ( txt ) = 20 ; Left ( txt ; Position ( txt ; "," ; 20 ; -1 ) ) ;
        txt
    )
)

フィールド4
Let (
    txt = Middle ( フィールド0 ; Length ( フィールド1 & フィールド2 & フィールド3  ) + 1 ; 20 ) ;
    Case (
        Length ( txt ) = 20 ; Left ( txt ; Position ( txt ; "," ; 20 ; -1 ) ) ;
        txt
    )
)

フィールド5
Let (
    txt = Middle ( フィールド0 ; Length ( フィールド1 & フィールド2 & フィールド3 & フィールド4 ) + 1 ; 20 ) ;
    Case (
        Length ( txt ) = 20 ; Left ( txt ; Position ( txt ; "," ; 20 ; -1 ) ) ;
        txt
    )
)
かな。カスタム関数にすると簡単でしょう。
https://www.dropbox.com/s/g94e98n63b2b3 … 2.zip?dl=0

Last edited by Shin (2023-01-01 16:58:46)

Offline

#4 2023-01-02 11:14:40

Alex
Member

Re: 1レコードを指定桁、カンマで分割する方法

himadaneeさん、返信有難うございます。
これは帳票上に反映させて、レコードが存在しているを知りたいというニーズがありまして、
ご指摘の通り、単なる見た目上の処理なのですが、ただの分割ではなくて、
どうしてもカンマで綺麗に分けて欲しいというところで詰まっていました。


Shinさん、本当に有難うございます。
これが望んでいた形です。
Positionの回数の引数は-1を入れることは全く思いもつきませんでした。
大変助かりました。

Offline

#5 2023-01-02 13:10:01

Shin
Member

Re: 1レコードを指定桁、カンマで分割する方法

Left ( txt ; Position ( txt ; "," ; 1 ; PatternCount ( txt ; "," ) ) )
でもいいはずですよ

Offline

#6 2023-01-02 16:20:07

himadanee
Guest

Re: 1レコードを指定桁、カンマで分割する方法

このデータなら、フィールド幅に合わせて自動的にカンマの後ろで改行されますが...

#7 2023-01-05 13:02:16

Alex
Member

Re: 1レコードを指定桁、カンマで分割する方法

himadaneeさん、

アドバイス有難うございます。
説明不足でしたが、このフィールド1~5のデータは見た目だけなのですが、
社内の帳票だけでなく、現地の帳票にも反映させるために客先の基幹システムにも送っています。
客先システム側に各20桁制限があるため、これまではただ20桁で分割して送っていたのですが、
新たな社内ニーズのカンマで綺麗に分割するところで詰まっていました。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 560.89 KiB (Peak: 579.8 KiB) ]