HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

■15260 / 親記事)  k3フォーマットで未定義値処理について
  
□投稿者/ hiro -(2026/02/07(Sat) 19:57:57)
    項目が文字列の時、k3フォーマットで書き出しをすればダブルクォーテーションでくくれるのですが、その項目値が未定義の時、 "" とはなってくれません
    文字列項目の未定義値の時は "" として書き出す方法はないでしょうか?
    よろしくお願いいたします。

引用返信 [メール受信/OFF] 削除キー/
■15261 / ResNo.1)  Re[1]: k3フォーマットで未定義値処理について
□投稿者/ hiro -(2026/02/07(Sat) 20:16:01)
    未定義だけ絞り込んで "" を入力すればと思ってやったら
    """" となってしまいました・・・うまくいかぬ・・
引用返信 [メール受信/OFF] 削除キー/
■15262 / ResNo.2)  Re[2]: k3フォーマットで未定義値処理について
□投稿者/ ONnoji -(2026/02/07(Sat) 21:17:37)
    2026/02/07(Sat) 21:38:38 編集(投稿者)

    No15261に返信(hiroさんの記事)
    > 未定義だけ絞り込んで "" を入力すればと思ってやったら
    > """" となってしまいました・・・うまくいかぬ・・

    CSV(Comma-Separated Values)というのは、コンマ区切りデータの総称だったんですけれど、

    いつの間にやら、拡張子(.csv)を悪のMS帝国がエクセルの形式一部にしてしまったんですよね。

    だから、マイクロソフトの csv や個々のアプリケーションの csvと言う具合で、一律の決まりはないんです。本当ですよ。

    DOSの頃は、文字列の前後の囲み文字(デリミター)は、二重引用符が一般的でしたが、一重引用符を使う例もありましたよ。

    また区切り文字(セパレータ)も、コンマ以外を使う場合もありました。

    今どきはコンマ区切りよりもタブ区切りの方が面倒が無いので、エクセルとやり取りする場合にはタブ区切りの方が便利だと思いますよ。

    ちなみに、どうしても桐から "" を出力したい場合には、

    こんな感じですが・・・

     変数宣言 自動,文字列{ &WQ  = #jis( #hex("22") ) } /* 二重引用符 */
     変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) } /* コンマ */

     印字開始 &mSaveFileName, 終了状態 = &status
     ジャンプ 行番号 = 先頭
     繰り返し ( .not #eof )

      印字 &WQ + [文字列] + &WQ, &comma, [数値], _13, _10, /* _13:CR _10:LF */


      ジャンプ 行番号 = 次行
     繰り返し終了
     印字終了

    それよりも、タブ区切りのテキストの方が簡単ですよ。

    桐で[書き出し:テキスト]を選べば、タブ区切りになりますよ。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    タブ区切りならば、前後の囲み文字からも、区切り文字からも解放されますからね。(^^)ok
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    p.s.

    今どきタブ区切り TSV(Tab-Separated Values)をサポートしていないシステムはありませんよ。

    エクセルもしかり、お止めしあれ。 ^^) _旦~~
引用返信 [メール受信/OFF] 削除キー/
■15264 / ResNo.3)  Re[1]: k3フォーマットで未定義値処理について
□投稿者/ 通りすがり -(2026/02/08(Sun) 16:22:48)
    桐は「null」と「長さゼロの文字列」を区別しないからそうなるのかな

    未定義値を使わない記号「¶」とかに置換して、K3で書き出して、メモ帳かなんかで「¶」を置換先を未入力で置換するとできますよ
引用返信 [メール受信/OFF] 削除キー/
■15271 / ResNo.4)  Re[2]: k3フォーマットで未定義値処理について
□投稿者/ hiro -(2026/02/09(Mon) 19:25:58)
    ONnojiさん、通りすがりさん、どうもありがとうございます。
    項目が沢山あるので、通りすがりさんの方法で置き換えておいて
    メモ帳で全置換しようと思います

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

解決済み!
引用返信 [メール受信/OFF] 削除キー/
■15273 / ResNo.5)  Re[3]: k3フォーマットで未定義値処理について
□投稿者/ 尾形 -(2026/02/10(Tue) 08:23:33)
    > 今どきはコンマ区切りよりもタブ区切りの方が面倒が無いので、エクセルとやり取りする場合にはタブ区切りの方が便利だと思いますよ。

    文字列型の項目で
    項目値に , 半角カンマを含めて
    csv書き出ししてみたら
    その項目値だけ "" で囲ってくれました

    桐が補完してくれるみたいですね
    以前は違ったような

引用返信 [メール受信/OFF] 削除キー/
■15275 / ResNo.6)  Re[4]: k3フォーマットで未定義値処理について
□投稿者/ ONnoji -(2026/02/10(Tue) 09:28:24)
    2026/02/10(Tue) 09:42:40 編集(投稿者)

    No15273に返信(尾形さんの記事)
    >>今どきはコンマ区切りよりもタブ区切りの方が面倒が無いので、エクセルとやり取りする場合にはタブ区切りの方が便利だと思いますよ。
    >
    > 文字列型の項目で
    > 項目値に , 半角カンマを含めて
    > csv書き出ししてみたら
    > その項目値だけ "" で囲ってくれました
    > 桐が補完してくれるみたいですね
    > 以前は違ったような

    先にも書いたように、そもそもCSV(Comma-Separated Values)というのは、コンマ区切りのテキストデータの総称だったんですよ。

    そしてテキストファイルだから普通は拡張子は(.txt)でしたよ。

    普通のテキストだけれども、コンマで区切っているデータ、つまり固定長じゃない!という意味ですね。

    なので、文字列中にコンマが存在すると文字データのコンマか、区切り文字(セパレータ)のコンマかの区別出来なくなるんですよ。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    従って、文字列中にコンマが存在する場合も考慮して、文字列の前後に囲み文字(デリミッター)を付けるワケです。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    さて、エクセルにおいては悪のMS帝国が拡張子(.csv)のテキストをエクセル用にしちゃったワケです。

    だから、昔を知らない人は、「csv = エクセル」と思い込んでるし、昔を知っている人は、コンマ区切りの可変長テキストだと思うわけです。
                                    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    蛇足ながら、そういう意味で管理工学研究所の(.k3)ファイルは、コンマ区切りの可変長テキスト、つまりCSV(Comma-Separated Values)なんですよ。

    しかし、管理工学研究所は拡張子を(.k3)として控えめに扱っているわけです。

    しかし、悪のMS帝国は違っていて、拡張子(.csv)をエクセル用として分捕ってしまったワケですよ。

    まとめると、CSV(Comma-Separated Values)とは、コンマ区切りの可変長テキストの事です。

    しかし、この場合には文字列の前後に囲み文字(デリミッター)に二重引用符以外を使用する場合もあります。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    BASICの方言みたいな、SQLの方言みたいなで、CSV(Comma-Separated Values)は微妙に仕様が違うことがあるんですよ。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    一方、拡張子(.csv)のテキストは「エクセルとのデータ交換」を目的としたコンマ区切りの可変長テキストのファイル形式ということになります。

    詳しい仕様が公開されているのかわかりませんがね・・・(^^ゞ

引用返信 [メール受信/OFF] 削除キー/
■15276 / ResNo.7)  Re[5]: k3フォーマットで未定義値処理について
□投稿者/ ONnoji -(2026/02/10(Tue) 10:01:22)
    2026/02/10(Tue) 10:20:09 編集(投稿者)

    > まとめると、CSV(Comma-Separated Values)とは、コンマ区切りの可変長テキストの事です。
    >
    > しかし、この場合には文字列の前後に囲み文字(デリミッター)に二重引用符以外を使用する場合もあります。
    > ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > BASICの方言みたいな、SQLの方言みたいなで、CSV(Comma-Separated Values)は微妙に仕様が違うことがあるんですよ。
    > ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > 一方、拡張子(.csv)のテキストは「エクセルとのデータ交換」を目的としたコンマ区切りの可変長テキストのファイル形式ということになります。
    >
    > 詳しい仕様が公開されているのかわかりませんがね・・・(^^ゞ

    こちら
     ↓
    CSVの国際標準 RFC 4180をいまさら読みなおしてみた - MONEX ENGINEER BLOG │マネックス エンジニアブログ
    https://blog.tech-monex.com/entry/2021/03/26/160000

    p.s.

    ちなみに、K3フォーマット(.k3) はDOS時代の「松・桐・楓などのデータ交換を目的」とした管理工学研究所のCSV(Comma-Separated Values)の仕様です。

    なお、ちょっと見にはK3フォーマット(.k3) と拡張子(.csv)のテキストは、ほぼほぼ区別できませんよ。アハハハハha
       ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
引用返信 [メール受信/OFF] 削除キー/
■15277 / ResNo.8)  Re[1]: k3フォーマット
□投稿者/ hidetake -(2026/02/10(Tue) 10:32:18)
    K3フォーマットファイルに関しては、細かくは
    昔の酒井本に載っていたけど、現在の使用は
    桐のヘルプファイルを見てみると、
    ------------------------------------------
    .k3x
    桐ver10以降のK3 フォーマットファイル
    K3 フォーマットファイルは、弊社独自のテキストファイルフォーマットです。
    文字コードはUTF-16です。
    各項目はコンマ(,)で区切られ、1件のレコードは改行コード(CRLF)で終わります。K3 フォーマットファイルはEOFコード(1A)で終わります。
    文字列型のデータは二重引用符(")で囲まれます。データの二重引用符の部分は2個続けて記述されます。CSVファイルと比べると、つぎの点が異なります。 •項目の区切りとなるコンマと文字列データを囲む二重引用符は、半角でも全角でもかまいません。

    •数値データは全角でも半角でもかまいません。
    •数値データに位取りコンマは含めません。
    •数値データを指数表記で指定することもできます。
    •項目値の前後に空白があってもかまいません。
    •先頭が半角の ## で始まる行のデータはコメントとして扱われます。表には読み込まれません。
    •データの中に機能文字を含めることはできません。
    ------------------------------------------
    と、あります。

    CSVに関しては、いろいろな方言があり、
    一筋縄では行きませんが、マイクロソフトに
    関しては、Excel97 の時は次のように CSV1 と
    CSV2 のような違いがありました。

    https://web.archive.org/web/19991108231036/http://www.microsoft.com/japan/support/kb/articles/J023/4/21.htm
    書き込めなかったので、全部全角にしました。
    ------------------------------------------
    CSV ファイル
    カンマで列を区切られたテキストファイルで、主に表計算やデータベース管理システムアプリケーション間でのデータの交換に使用されます。一般的には 2 つの形式があり、それぞれ CSV1、CSV2 と呼ばれることがあります。

    CSV1.
    レコード形式を持ったデータを表すフォーマットで、レコードの終わりに CR/LF コードが入り、各列間はカンマで区切られます。また、文字列は、前後をダブルクォーテーションで囲み、空白の列は何も書かずにカンマを続けます。
    CSV2.
    CSV1 とほぼ同じですが、文字列をダブルクォーテーションで囲みません。

    補足:これらと大変によく似た K3 というファイル形式があります。これはデータベース管理システム「桐」で使われているフォーマットで、CSV1 とほぼ同じですが、空白の列はダブルクォーテーションを二つ続けた後にカンマで区切ります。

    Excel 97 では、CSV1、CSV2 ともに読み込み可能です。ただし出力形式は CSV2 を元に、含まれる文字によっては例外的な処理が行われます。以下を参照してください。

    データ中に「"」文字が使用されたとき.
    「"」は、CSV のデリミタとしての意味を持っていますので、文字として表したいときには、「""」と二つつなげて表現されます。また、データ全体も「"」で自動的に囲まれます。
    データの先頭に「'」が使用されたとき.
    「'」はセル内では後に文字列が続くことを示す Excel 97 独自の特別な文字で、これはテキスト ファイルとして出力されません。データの途中にある「'」はデータとして扱われます。
    表示形式がセルに設定されているとき.
    Excel 97 では、セルに表示されている内容に極力近い形でテキスト ファイルに出力します。したがって、表示形式による 「%」、「\」、「$」 記号や 日付/時刻などの表示も、そのまま出力されます。また、「,」を含む表示形式 (通貨や数値の桁区切りなど) がセルに設定されているときは、データの前後をダブルクォーテーションで囲みます (例:"12,345")。これは、列の区切り文字の「,」と区別するためです。
    ------------------------------------------

    なお、K3フォーマットファイルでは、ファイルの
    最後は、EOFコード(1A)で終わるので、CSV的に
    見ますと、1行ゴミがついてしまうようにえます。



引用返信 [メール受信/OFF] 削除キー/
■15278 / ResNo.9)  Re[2]: k3フォーマット
□投稿者/ hiro -(2026/02/10(Tue) 21:08:09)
    hidetakeさん、どうもありがとうございます。

    色んなCSVがあるのですね、ややこしいw
    読み込む側は「ソリマチ」の会計ソフトを使うのですが、未定義の文字列項目値は "" だけが必要なようで、世の中にある普通のテキストではなく特殊な方法なようです。(逆に桐のk3フォーマットの書き出しが特殊なのかな?w)


引用返信 [メール受信/OFF] 削除キー/

次のレス10件>

スレッド内ページ移動 / << 0 | 1 >>

このスレッドに書きこむ

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -