【VBS】ドラッグ&ドロップで結合ファイルを作成する

下のコードをテキストファイルにコピーして「MargeTextFile.vbs」とでも名前を付けて保存してください。

このvbsファイルに複数選択したテキストファイルをドラッグ&ドロップするとマージされたファイル「Marge.txt」ができます。

MargeTextFile.vbs

if WScript.Arguments.Count>1 Then
  Dim FSO
  Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
  Dim sMarge
  For i=0 To WScript.Arguments.Count-1
    Dim oArg
    oArg=WScript.Arguments.Item(i)
    If FSO.FileExists(oArg) Then
      Dim oFs
      Set oFs=FSO.GetFile(oArg).OpenAsTextStream
      sMarge=sMarge & oFs.ReadAll
    End If
  Next
  Dim oMrg
  Set oMrg=FSO.OpenTextFile(fso.getParentFolderName(WScript.ScriptFullName) & "\Marge.txt",2,True)
  oMrg.Write sMarge
  oMrg.Close
End If

UTF-8
MargeTextFileforUTF8.vbs

if WScript.Arguments.Count>1 Then
  Dim FSO
  Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
  Dim sMarge
  For i=0 To WScript.Arguments.Count-1
    Dim oArg
    oArg=WScript.Arguments.Item(i)
    If FSO.FileExists(oArg) Then
      Dim oFs
      Set oFs=CreateObject("ADODB.Stream")
      oFs.Type=2
      oFs.Charset="UTF-8"
      oFs.Open
      oFs.LoadFromFile oArg
      sMarge=sMarge & oFs.ReadText
      oFs.Close
    End If
  Next
  Dim oMrg
  Set oMrg=CreateObject("ADODB.Stream")
  oMrg.Type=2
  oMrg.Charset="UTF-8"
  oMrg.Open
  oMrg.WriteText sMarge
  oMrg.SaveToFile FSO.getParentFolderName(WScript.ScriptFullName) & "\Marge.txt", 2
  oMrg.Close
End If

【Java Swing】csvファイルをJTableに表示するプログラム

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;
public class CsvView extends JFrame {
 private final static Charset SJIS = Charset.forName("sjis");
 private final JTable table = new JTable();
 private final JFileChooser filechooser = new JFileChooser();
 public CsvView(String title) {
  setTitle(title);
  setBounds(100, 100, 300, 250);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  filechooser.setDialogTitle("Csvファイルを開く");
  filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
  FileFilter filter = new FileNameExtensionFilter("CSVファイル", "csv");
  filechooser.addChoosableFileFilter(filter);
  JMenuItem menuitem1 = new JMenuItem("Csvファイルを開く");
  menuitem1.addActionListener(e -> loadCSV(true));
  JMenu menu1 = new JMenu("ファイル");
  menu1.add(menuitem1);
  JMenuBar menubar = new JMenuBar();
  menubar.add(menu1);
  setJMenuBar(menubar);
  table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  JScrollPane sp = new JScrollPane(table);
  add(sp);
 }

 private void loadCSV(boolean hasColHeader) {
  int selected = filechooser.showOpenDialog(this);
  if (selected != JFileChooser.APPROVE_OPTION) {
   return;
  }
  Path path = filechooser.getSelectedFile().toPath();
  int option = JOptionPane.showConfirmDialog(this, "ヘッダー(1行目)にタイトルを含みますか?",
    "ヘッダーの有無指定", JOptionPane.YES_NO_OPTION, 
    JOptionPane.WARNING_MESSAGE);
  if (option == JOptionPane.YES_OPTION){
   hasColHeader=true;
  }else if (option == JOptionPane.NO_OPTION){
   hasColHeader=false;
  }
  
  try (BufferedReader reader = Files.newBufferedReader(path, SJIS)) {
   String line = reader.readLine();
   if (line == null || line.isEmpty()) {
    table.setModel(new DefaultTableModel());
    return;
   }
   String[] lineData = line.split(",", -1);
   DefaultTableModel model;
   if (hasColHeader) {
    model = new DefaultTableModel(lineData, 0);
   } else {
    model = new DefaultTableModel(0, lineData.length);
    model.addRow(lineData);
   }
   while ((line = reader.readLine()) != null) {
    model.addRow(line.split(",", -1));
   }
   table.setModel(model);
  } catch (IOException e) {
   JOptionPane.showMessageDialog(this, e);
  }
 }

 public static void main(String args[]) {
  SwingUtilities.invokeLater(() -> {
   CsvView frame = new CsvView("Csvファイル表示");
   frame.setVisible(true);
  });
 }
}

【JavaFX】csvファイルをTableViewに表示するプログラム

■[JavaFX]csvファイルをTableViewに表示するプログラム

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Optional;
import java.util.StringTokenizer;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SeparatorMenuItem;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.util.Callback;
public class CsvView extends Application {
    ObservableList<String> headers = FXCollections.observableArrayList();
    ObservableList<ObservableList> data = FXCollections.observableArrayList();
    FileChooser fileChooser = new FileChooser();
    TableView<ObservableList> table;
    @Override
    public void start(Stage stage) {
        stage.setTitle("Csvファイル表示");
        Group root = new Group();
        Scene scene = new Scene(root,400,250);
        MenuBar menuBar = new MenuBar();
        generateMenu(menuBar, stage);
        table = new TableView();
        BorderPane borderPane = new BorderPane();
        borderPane.prefHeightProperty().bind(scene.heightProperty().subtract(0));
        borderPane.prefWidthProperty().bind(scene.widthProperty());
        borderPane.setTop(menuBar);
        borderPane.setCenter(table);
        ((Group) scene.getRoot()).getChildren().addAll(borderPane);
        stage.setScene(scene);
        stage.show();
    }
    private void generateMenu(MenuBar menuBar, Stage stage) {
        // Menu File
        Menu menuFile = new Menu("ファイル");
        menuBar.getMenus().addAll(menuFile);
        // MenuItem Exit
        MenuItem open = new MenuItem("CSVファイルを開く");
        open.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent t) {
                fileChooser.setTitle("CSVファイルを開く");
                fileChooser.getExtensionFilters().clear();
                fileChooser.getExtensionFilters().addAll(
                        new FileChooser.ExtensionFilter("CSVファイル", "*.csv"),
                        new FileChooser.ExtensionFilter("全てのファイル", "*.*")
                );
                File file = fileChooser.showOpenDialog(stage);
                if (file != null) {
                    readCSV(file);
                }
            }
        });
        // MenuItem Exit
        MenuItem exit = new MenuItem("Exit");
        exit.setOnAction((ActionEvent t) -> {
            System.exit(0);
        });
        menuFile.getItems().addAll(open, new SeparatorMenuItem(), exit);
    }
    void readCSV(File file) {
        try {
            if (checkBeforeReadfile(file)) {
                FileInputStream in = new FileInputStream(file);
                InputStreamReader sr = new InputStreamReader(in, "sjis");
                BufferedReader br = new BufferedReader(sr);
                String line;
          Alert alrt = new Alert(AlertType.NONE,"",ButtonType.YES,ButtonType.NO);
          alrt.setTitle("ヘッダーの有無指定");
          alrt.setHeaderText(null);
          alrt.setContentText("ヘッダー(1行目)にタイトルを含みますか?");
          Optional<ButtonType> result = alrt.showAndWait();
          boolean colomnhead=false;
          if (result.get() == ButtonType.YES) {
           colomnhead = true;
          }
          data.clear();
          headers.clear();
          table.getColumns().clear();
          String linedata;
          linedata=br.readLine();
          if(linedata == null || linedata.isEmpty()) {
           return;
          }
          StringTokenizer token2 = new StringTokenizer(linedata, ",");
          if(colomnhead) {
                    while (token2.hasMoreTokens()) {
                  headers.add(token2.nextToken());
                    }
          }else {
                    while (token2.hasMoreTokens()) {
                  headers.add(null);
                  token2.nextToken();
                    }
                    StringTokenizer token3 = new StringTokenizer(linedata, ",");
                    ObservableList<String> lineList2 = FXCollections.observableArrayList();
                    while (token3.hasMoreTokens()) {
                        lineList2.add(token3.nextToken());
                    }
           data.add(lineList2);
       }
          while ((line = br.readLine()) != null) {
           StringTokenizer token = new StringTokenizer(line, ",");
           ObservableList<String> lineList = FXCollections.observableArrayList();
                    while (token.hasMoreTokens()) {
                        lineList.add(token.nextToken());
                    }
           data.add(lineList);
          }
            } else {
                System.out.println("No file exists or can't open.");
            }
        } catch (FileNotFoundException e) {
            System.out.println("FileNotFoundException : " + e.getMessage());
        } catch (IOException e) {
            System.out.println("IOException : " + e.getMessage());
        }
        generateTable();
    }
    private void generateTable() {
        int colN = 0;
        TableColumn[] column = new TableColumn[headers.size()];
        for (String colName : headers) {
            final int idx = colN;
            column[colN] = new TableColumn(colName);
            column[colN].setCellValueFactory(
                    new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() {
                        @Override
                        public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {
                            return new SimpleStringProperty(param.getValue().get(idx).toString());
                        }
                    });
            colN++;
        }
        table.getColumns().addAll(column);
        table.setItems(data); // finally add data to tableview
    }
    boolean checkBeforeReadfile(File file) {
        if (file.exists()) {
            if (file.isFile() && file.canRead()) {
                return true;
            }
        }
        return false;
    }
    public static void main(String[] args) {
        launch(args);
    }
}

【Batch】2次元配列を扱う

Batchプログラムで2次元配列を扱います
科目データを個人・総合・性別ごとの合計・平均を求めています
遅延環境変数が必須なのでsetlocal enabledelayedexpansionを使います

data.txt

性別 名前 科目1 科目2 科目3

1 akiyama 67 89 78 
2 kimura 79 86 92 
1 tanaka 62 85 79
1 inoue 96 86 91
2 satou 69 74 70
2 nomura 89 85 71 
2 mutou 65 58 90
2 harada 78 85 82
1 ueda 93 84 69
1 enomoto 59 88 75 
2 okada 62 85 97
1 yamada 98 75 84 
2 watanabe 89 71 96 
1 chida 87 90 91

Avarage.bat

@echo off

setlocal enabledelayedexpansion
rem ファイルから2次元配列にデータを格納
set n=0
cd %~dp0
for /f "tokens=1,2,3,4,5" %%a in (data.txt) do (
  set name[!n!][0]=%%a
  set name[!n!][1]=%%b
  set name[!n!][2]=%%c
  set name[!n!][3]=%%d
  set name[!n!][4]=%%e
  set /a n=n+1
)
set /a n=n-1
set tmp=0
set avg=0
set total=0
set t1=0
set t2=0
set t3=0
set tm=0
set tm1=0
set tm2=0
set tm3=0
set tmc=0
set tw=0
set tw1=0
set tw2=0
set tw3=0
set twc=0
rem 各個人の成績と合計と平均
echo 名前 性別 科目1 科目2 科目3 合計 平均
echo ==============================================
for /l %%x in (0,1,!n!) do (
  set /a total=total+!name[%%x][2]!+!name[%%x][3]!+!name[%%x][4]!
  set /a t1=t1+!name[%%x][2]!
  set /a t2=t2+!name[%%x][3]!
  set /a t3=t3+!name[%%x][4]!
  if !name[%%x][0]!==1 (
    set /a tm=tm+!name[%%x][2]!+!name[%%x][3]!+!name[%%x][4]!
    set /a tm1=tm1+!name[%%x][2]!
    set /a tm2=tm2+!name[%%x][3]!
    set /a tm3=tm3+!name[%%x][4]!
    set /a tmc=tmc+1
  ) else (
    set /a tw=tw+!name[%%x][2]!+!name[%%x][3]!+!name[%%x][4]!
    set /a tw1=tw1+!name[%%x][2]!
    set /a tw2=tw2+!name[%%x][3]!
    set /a tw3=tw3+!name[%%x][4]!
    set /a twc=twc+1
  )
  set /a tmp=!name[%%x][2]!+!name[%%x][3]!+!name[%%x][4]!
  set /a avg=tmp/3
  echo !name[%%x][1]! !name[%%x][0]! !name[%%x][2]! !name[%%x][3]! !name[%%x][4]! total=!tmp! average=!avg!
)
echo ==============================================
rem 全体の科目ごとの合計と総合計と平均
set /a n=n+1
echo total=!total! 1total=!t1! 2total=!t2! 3total=!t3!
set ave=0
set ave1=0
set ave2=0
set ave3=0
set /a ave=total/!n!
set /a ave1=t1/!n!
set /a ave2=t2/!n!
set /a ave3=t3/!n!
echo allaverage=!ave! all1average=!ave1! all2average=!ave2! all3average=!ave3!

rem 男性の科目ごとの合計と総合計と平均
echo mantotal=!tm! man1total=!tm1! man2total=!tm2! man3total=!tm3!
set manave=0
set man1ave=0
set man2ave=0
set man3ave=0
set /a manave=!tm!/!tmc!
set /a man1ave=!tm1!/!tmc!
set /a man2ave=!tm2!/!tmc!
set /a man3ave=!tm3!/!tmc!
echo manaverage=!manave! man1average=!man1ave! man2average=!man2ave! man3average=!man3ave!

rem 女性の科目ごとの合計と総合計と平均
echo womantotal=!tw! woman1total=!tw1! woman2total=!tw2! woman3total=!tw3!
set womanave=0
set woman1ave=0
set woman2ave=0
set woman3ave=0
set /a womanave=!tw!/!twc!
set /a woman1ave=!tw1!/!twc!
set /a woman2ave=!tw2!/!twc!
set /a woman3ave=!tw3!/!twc!
echo womanaverage=!womanave! woman1average=!woman1ave! woman2average=!woman2ave! woman3average=!woman3ave!

結果

名前 性別 科目1 科目2 科目3 合計 平均
==============================================
akiyama 1 67 89 78 total=234 average=78
kimura 2 79 86 92 total=257 average=85
tanaka 1 62 85 79 total=226 average=75
inoue 1 96 86 91 total=273 average=91
satou 2 69 74 70 total=213 average=71
nomura 2 89 85 71 total=245 average=81
mutou 2 65 58 90 total=213 average=71
harada 2 78 85 82 total=245 average=81
ueda 1 93 84 69 total=246 average=82
enomoto 1 59 88 75 total=222 average=74
okada 2 62 85 97 total=244 average=81
yamada 1 98 75 84 total=257 average=85
watanabe 2 89 71 96 total=256 average=85
chida 1 87 90 91 total=268 average=89
==============================================
total=3399 1total=1093 2total=1141 3total=1165
allaverage=242 all1average=78 all2average=81 all3average=83
mantotal=1726 man1total=562 man2total=597 man3total=567
manaverage=246 man1average=80 man2average=85 man3average=81
womantotal=1673 woman1total=531 woman2total=544 woman3total=598
womanaverage=239 woman1average=75 woman2average=77 woman3average=85

【VB.net】丸いボタン、角の丸いボタンを作る

1.CircleButtonというプロジェクトを作る
2.プロジェクトにクラスファイルを追加する
3.クラスファイルにコードを書く
4.一度コンパイル(ビルド)する
5.ツールボックスから対応したコントロールをフォームに張り付ける
6.RoundButtonはプロパティRoundで丸みを調整できる

※貼り付けたコントロールのFlatAppearaanceのBorderSizeを0、FlatStyleをFlatにして下さい

以下クラスファイルに書くコード

EllipseButton.vb

Imports System.Windows.Forms
Imports System.Drawing.Drawing2D

Public Class EllipseButton
    Inherits Button

    Protected Overrides Sub OnPaint(pevent As PaintEventArgs)
        Dim gp As GraphicsPath = New GraphicsPath
        gp.StartFigure()
        gp.AddEllipse(0, 0, ClientSize.Width, ClientSize.Height)
        gp.CloseFigure()
        Me.Region = New System.Drawing.Region(gp)
        MyBase.OnPaint(pevent)
    End Sub
End Class

RoundButton.vb

Imports System.Windows.Forms
Imports System.Drawing.Drawing2D

Public Class RoundButton
    Inherits Button

    Protected Overrides Sub OnPaint(pevent As PaintEventArgs)
        Dim gp As GraphicsPath = New GraphicsPath
        Dim r As Single = pr
        Dim x As Single = 0.0F
        Dim y As Single = 0.0F
        Dim w As Single = ClientSize.Width
        Dim h As Single = ClientSize.Height
        gp.StartFigure()
        gp.AddArc(x, y, r, r, 180.0F, 90.0F)
        gp.AddArc(w - r, y, r, r, 270.0F, 90.0F)
        gp.AddArc(w - r, h - r, r, r, 0.0F, 90.0F)
        gp.AddArc(x, h - r, r, r, 90.0F, 90.0F)
        gp.CloseFigure()
        Me.Region = New System.Drawing.Region(gp)
        MyBase.OnPaint(pevent)
    End Sub

    Private pr = 50
    Public Property Round() As Single
        Get
            Return pr
        End Get
        Set(value As Single)
            pr = value
        End Set
    End Property

End Class

SideRoundButton.vb

Imports System.Windows.Forms
Imports System.Drawing.Drawing2D

Public Class SideRoundButton
    Inherits Button

    Protected Overrides Sub OnPaint(pevent As PaintEventArgs)
        Dim gp As GraphicsPath = New GraphicsPath
        Dim x As Single = 0.0F
        Dim y As Single = 0.0F
        Dim w As Single = ClientSize.Width
        Dim h As Single = ClientSize.Height
        gp.StartFigure()
        gp.AddArc(x, y, h, h, 90.0F, 180.0F)
        gp.AddArc(w - h, y, h, h, 270.0F, 180.0F)
        gp.CloseFigure()
        Me.Region = New System.Drawing.Region(gp)
        MyBase.OnPaint(pevent)
    End Sub
End Class

【C#】丸いボタン、角の丸いボタンを作る

1.CircleButtonというプロジェクトを作る
2.プロジェクトにクラスファイルを追加する
3.クラスファイルにコードを書く
4.一度コンパイル(ビルド)する
5.ツールボックスから対応したコントロールをフォームに張り付ける
6.RoundButtonはプロパティRoundで丸みを調整できる

※貼り付けたコントロールのFlatAppearaanceのBorderSizeを0、FlatStyleをFlatにして下さい

以下クラスファイルに書くコード

EllipseButton.cs

using System;
using System.Collections.Generic;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CircleButton
{
    class EllipseButton : Button
    {
        protected override void OnPaint(PaintEventArgs pevent)
        {
            GraphicsPath gp = new GraphicsPath();
            gp.AddEllipse(0,0,ClientSize.Width,ClientSize.Height);
            this.Region = new System.Drawing.Region(gp);
            base.OnPaint(pevent);
        }
    }
}

RoundButton.cs

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CircleButton
{
    class RoundButton : Button
    {
        protected override void OnPaint(PaintEventArgs pevent)
        {
            float r = pr;
            float x = 0.0f;
            float y = 0.0f;
            float w = ClientSize.Width;
            float h = ClientSize.Height;
            GraphicsPath gp = new GraphicsPath();
            gp.StartFigure();
            gp.AddArc(x , y ,  r , r , 180.0f , 90.0f);
            gp.AddArc(w - r, y , r , r, 270.0f , 90.0f);
            gp.AddArc(w - r , h - r , r , r, 0.0f , 90.0f);
            gp.AddArc(x , h - r , r , r , 90.0f, 90.0f);
            gp.CloseFigure();
            this.Region = new System.Drawing.Region(gp);
            base.OnPaint(pevent);
        }
        private int pr = 50;
        public int Round
        {
            set
            {
                pr = value;
            }
            get
            {
                return pr;
            }
        }
    }
}

SideRoundButton.cs

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CircleButton
{
    class SideRoundButton : Button
    {
        protected override void OnPaint(PaintEventArgs pevent)
        {
            float x = 0.0f;
            float y = 0.0f;
            float w = ClientSize.Width;
            float h = ClientSize.Height;
            GraphicsPath graphics = new GraphicsPath();
            graphics.StartFigure();
            graphics.AddArc(x, y, h, h, 90.0f, 180.0f);
            graphics.AddArc(w - h, y, h, h, 270.0f, 180.0f);
            graphics.CloseFigure();
            this.Region = new System.Drawing.Region(graphics);
            base.OnPaint(pevent);
        }
    }
}

【Ruby】Tk(ツールキット)のダイアログのサンプルプログラム【Tk】

Tk.getOpenFile
Tk.getSaveFile
Tk.chooseDirectory
Tk.chooseColor
Tk.messageBox

Tk.getOpenFile

require 'tk'
root = TkRoot.new
root.title = "漢字のタイトル"
button_click = Proc.new {
  files=Tk.getOpenFile(
  #files=Tk::getOpenFile( #←これでも良い
    filetypes:"{{Textファイル} {.txt}} {{Rubyファイル} {.rb}} {{全てのファイル} {*}}", #スペースの区切り位置に注意
    title:"テキストファイルを開く", #ダイアログのタイトル
    initialdir:"c:\\users\\owner\\documents", #指定なしまたは不正パスの場合「ピクチャ」フォルダになる(Windows10)
    multiple:"true", #複数ファイル指定可能
    defaultextension:"rb" #拡張子が省略されて入力された場合のデフォルトの拡張子(OpenFileの時は意味ないので使わないほうが良い)
  )
  puts(files)
  safiles=files.split(/ /)  # multipleで複数選択可能の場合、ファイルパスはスペース区切りで得られる(途中ディレクトリ名またはファイル名にスペースが含まれる場合は注意)
  puts(safiles)
}
button = TkButton.new(root) do
   text "button"
   pack("side" => "left",  "padx"=> "50", "pady"=> "50")
end
button.command = button_click
#button.comman = button_click   ←これでもOK
Tk.mainloop

Tk.getSaveFile

require 'tk'
root = TkRoot.new
root.title = "漢字のタイトル"
button_click = Proc.new {
  files=Tk.getSaveFile(
  #files=Tk::getOpenFile( #←これでも良い
    filetypes:"{{Textファイル} {.txt}} {{Rubyファイル} {.rb}} {{全てのファイル} {*}}", #スペースの区切り位置に注意
    title:"テキストファイルを開く", #ダイアログのタイトル
    initialdir:"c:\\users\\owner\\documents\\Visual Studio Code", #指定なしまたは不正パスまたはc:\\users\\owner\\documentsの場合OneDrive(SkyDrive)の「ドキュメント」フォルダになる(Windows10)
    defaultextension:"rb" #拡張子が省略されて入力された場合のデフォルトの拡張子
  )
  puts(files)
  safiles=files.split(/ /)  # multipleで複数選択可能の場合、ファイルパスはスペース区切りで得られる(途中ディレクトリ名またはファイル名にスペースが含まれる場合は注意)
  puts(safiles)
}
button = TkButton.new(root) do
   text "button"
   pack("side" => "left",  "padx"=> "50", "pady"=> "50")
end
button.command = button_click
#button.comman = button_click   ←これでもOK
Tk.mainloop

Tk.chooseDirectory

require 'tk'
root = TkRoot.new
root.title = "漢字のタイトル"
button_click = Proc.new {
  folder=Tk.chooseDirectory(
  #folder=Tk::chooseDirectory( #←これでも良い
    title:"フォルダ指定", #ダイアログのタイトル
    initialdir:"c:\\Users\\owner\\Documents\\Visual Studio Code" #指定なしまたは不正パスの場合「OneDrive(SkyDrive)ドキュメント」フォルダになる(Windows10)
  )
  puts(folder)
}
button = TkButton.new(root) do
   text "button"
   pack("side" => "left",  "padx"=> "50", "pady"=> "50")
end
button.command = button_click
#button.comman = button_click   ←これでもOK
Tk.mainloop

Tk.chooseColor

require 'tk'
root = TkRoot.new
root.title = "漢字のタイトル"
button_click = Proc.new {
  color=Tk.chooseColor(
  #color=Tk::chooseColor( #←これでも良い
    title:"色の選択", #ダイアログのタイトル
    initialcolor:"#ff0000" #デフォルトの色
  )
  puts(color)
}
button = TkButton.new(root) do
   text "button"
   pack("side" => "left",  "padx"=> "50", "pady"=> "50")
end
button.command = button_click
#button.comman = button_click   ←これでもOK
Tk.mainloop

Tk.messageBox

require 'tk'
root = TkRoot.new
root.title = "漢字のタイトル"
button_click = Proc.new {
  ans=Tk.messageBox(
  #color=Tk::messageBox( #←これでも良い
    title:"メッセージ", #ダイアログのタイトル
    type:"yesnocancel", #ok,okcancel,yesno,yesnocancel,retrycancel,abortretryignore
    icon:"error", #info,error,question,warning
    message:"いずれかのボタンを押してください"
  )
  puts(ans)
}
button = TkButton.new(root) do
   text "button"
   pack("side" => "left",  "padx"=> "50", "pady"=> "50")
end
button.command = button_click
#button.comman = button_click   ←これでもOK
Tk.mainloop