最近書く例が VB ばっかでアレですが、業務では VC の方が多いです。今部下と言うか、部下なんだけど、そいつがいじってるのが FlexGrid なので仕方ない(笑
さて、VB と言えばなんでしょう。オレは ASP.NET ( engine は VB.NET しか使った事無い。C# は純アプリでのみで活躍 ) の方が得意ですが、最近いじってないなァ…。と言うのはさておき、この FlexGrid。画面でファイルに落としたいとか。しかも CSV 形式で。
ファイルの中身はと言うと書き込まれるのが固定幅ではないので、さて困ったぞ。と。
画面で取るなら列と行で二次元配列?固定幅ではないという事は可変幅なので空白がきたらそこは削除か。OK。これでロジック完成。
しかし、いったん画面を変数に保管しないと空白行があるかどうかなど判別つかなくね?(ここにたどりつくのに20分ほどかかる)
つまり ■ という画面があったら u(i, j) に情報をためないといけなく出力時は一行ずつしか出力できない( VB の仕様 というかファイル出力時に処理をややこしくしたくなかった )ので、一行ずつって事は一次元配列か。。。
つまり二次元で情報を取得 → 一次元で一行ずつ書き込み。どう書きますか?俺はこう書いた。

    fNumber = FreeFile
    Open FName For Output As #fNumber
    
    i = 0
    k = 1
    
    Print #fNumber, ",,&" '最初の行はこれで決めうち

    chk_flg = 0
    
    With MSFlexGrid10
        For k = 1 To 100 '列カウント
            For j = 8 To 35 '行カウント
                If .TextMatrix(k, j) <> "" Then 'GRIDに入っているデータが空でなかったら
                    u1(i, j) = .TextMatrix(k, j) 'データセット
                    chk_flg = 1
                End If
            Next j
            If chk_flg = 1 Then
                i = i + 1
                chk_flg = 0
            End If
            j = 8
        Next k
        
        For i = 0 To 50
            For j = 8 To 35
                u2(i) = u2(i) & u1(i, j) & ","
                u2(i) = Replace(u2(i), ",,", "") 'カンマが2つ以上続く場合は削除
            Next j
            If u2(i) = "" Then 'データが無くなったらLoop抜ける
                Exit For
            End If
            Print #fNumber, ",,,," & u2(i) & ",&" '先頭行は ,,,, がかならず入る
            j = 8
        Next i
    End With

    Print #fNumber, ",end" '最終行には ,end を書き込む!

    Close #fNumber

ふっと思い浮かばなかったのは以下の部分。
u2(i) = u2(i) & u1(i, j) & ","
コイツがどうしても思いつかなかったが、一時間ほどで完成w
さて、
アルゴリズムを作成する」
という言葉は正しくはアリマセン。アルゴリズムは選択するものです。アルゴリズムには順次処理とランダム処理しか無い為。よって、異なるのはロジックです。次元を変える方法は良くある(?)かもしれないが、実際にしている所は見たことが無い。オレはこのロジックを "次元変換" と名づける。
これは VB でなくても C でも C++ でも当然可能。実現方法は異なるケドネ。簡単でしょ。