プログラム言語 入出力

テキストファイル操作

文字単位
using System.IO;
using System.Text;

読込用、既存テキストオブジェクト(文字コードを合わせないと文字化けする)
StreamReader oldsr = new StreamReader(path:"D:\read.txt",encoding:Encoding.GetEncoding("shift-jis"));

書込用、既存テキストオブジェクト(文字コードを合わせないと文字化けする)
StreamWriter newsr = new StreamWriter(path:"D:\write.txt",append:true,encoding:Encoding.GetEncoding("shift-jis"));

読込ファイル全行Loop
while(oldsr.Peek() > 0){

  読み込み
  string strBuffar = oldsr.ReadLine();

  書き込み
  newsr.WriteLine(value:strBuffar);

}

oldsr.Close();
newsr.Close();

全行読込
string s = File.ReadAllText(path: @"D:\test.txt", encoding: Encoding.Default);
string s = File.ReadAllText(@"D:\test.txt", Encoding.GetEncoding("Shift_JIS"));

行単位で配列に格納
string[] s = File.ReadAllLines(@"D:\test.txt", Encoding.Default);

全文字列(配列)書込
string s = "test\ntest\n";
File.WriteAllLines(path: @"D:\test.txt", contents: s);
D:\test.txt"の既存の内容は上書きされる

string[] ary =
 {
  @"test1",
  @"test2",
  @"test3",
 };
File.WriteAllLines(path: @"D:\test.txt", contents: ary);

Imports System.Text
Imports System.IO

‘読込用、既存テキストオブジェクト(文字コードを合わせないと文字化けする)
Dim oldsr As New StreamReader(path:="D:\read.txt", encoding:=Encoding.GetEncoding("shift_jis"))

‘書込用、既存テキストオブジェクト(文字コードを合わせないと文字化けする)
Dim newsr As New StreamWriter(path:="D:\write.txt", append:=True, encoding:=Encoding.GetEncoding("shift_jis"))

‘読込ファイル全行Loop
Do While oldsr.Peek() > 0

  ’読き込み
  Dim strBuffar As String = oldsr.ReadLine()

  ’書き込み
  Call newsr.WriteLine(value:=strBuffar)

Loop

oldsr.Close()
newsr.Close()

[プロジェクト] メニュー/ [参照設定] → [Microsoft Scripting Runtime] を有効に

' FileSystemObject
Dim cFso As FileSystemObject
Set cFso = New FileSystemObject

' 存在確認/ファイル削除
If cFso.FileExists("C:\test.txt") Then
cFso.DeleteFile ("C:\test.txt")
End If

' ファイルを作成する
Dim cTextStream As TextStream
Set cTextStream = cFso.CreateTextFile("C:\test.txt")

' 録画開始の合図を書き込み
cTextStream.Write ("START")

' 不要になった時点で参照を解放する (Terminate イベントを早めに起こす)
Set cFso = Nothing

int data = 0;
try(
  FileWriter writer = new FileWriter(new File("C:\\test.txt"));
  FileReader reader = new FileReader(new File("C:\\test.txt"));
){

 writer.write("JAVA");
 writer.flush();
 while((data = reader.read()) != -1){
  System.out.println(data);
  → 100 74 97 118 97
  System.out.println((char)data);
  → 100 J A V A
 }

}catch(Exception ex){
 System.out.println(ex.getMessage());
}

int data = 0;
try(
  BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\test.txt"));
  BufferedReader reader = new BufferedReader(new FileReader("C:\\test.txt"));

  文字コード指定読み込み
  BufferedReaderreader reader =
   new BufferedReader(
    new InputStreamReader(
     new FileInputStream( new File("C:\\test.txt")),"UTF-8"));

){

 writer.write("JAVA\r\n");
 writer.write("C#\r\n");
 writer.write("PHP\r\n");
 writer.flush();

 基準設定
 reader.mark(256);
 System.out.println(reader.readLine());
 // → JAVA
 System.out.println(reader.readLine());
 // → C#
 リセット
 reader.reset();
 System.out.println(reader.readLine());
 // → JAVA
 N文字スキップ
 reader.skip(1);
 System.out.println(reader.readLine());
 // → #

}catch(Exception ex){
 System.out.println(ex.getMessage());
}

対象ファイルの選択はファイル選択参照

<script>
  $(function(){
    $("#myFile").change(function(evt){
      try {
        //ファイル名取得
        var strPath = $("#myFile").val();
        $("#fileNm").text(strPath);
        
        //ファイルオブジェクト取得
        var file = evt.target.files;
        
        //FileReaderの作成
        var reader = new FileReader();
        
        //テキスト形式で読み込む
        reader.readAsText(file[0]);
        
        //読込終了後の処理
        reader.onload = function(ev){
          //読み込み結果
          window.alert(reader.result);
        };
      }catch(e){
        window.alert(e.message);
      }
    });
  });
</script>

読み込み
$fp = fopen('test.txt', 'r');

while ($line = fgets($fp)) {
  print_r($line);
  1行をタブ区切りで配列に格納
  $wk = explode("\t", $line);
}

fclose($fp);

書き込み(上書き)
$fp = fopen('test.txt', 'w');

fwrite($fp, 'php' . "\n");

fclose($fp);

書き込み(追加)
$fp = fopen('test.txt', 'a');

fwrite($fp, 'php' . "\n");

fclose($fp);

バイト単位
using System.IO;

暗号化
using (var stream = new FileStream(path: @"d:\a\test.dat", mode: FileMode.Create))
{
 byte[] before = Encoding.UTF8.GetBytes(@"Secret Message");
 foreach (var elm in before)
 {
  stream.WriteByte((byte)elm);
 }
}

複合
using (var stream = new FileStream(path: @"d:\a\test.dat", mode: FileMode.Open))
{
 byte[] after = new byte[stream.Length];
 for (int i = 0; i < after.Length; i++)  {   after[i] = (byte)(stream.ReadByte() ^ 1);
 }
 string s = Encoding.UTF8.GetString(bytes: after);
}

暗号化
byte[] before = Encoding.UTF8.GetBytes(@"Secret Message");

foreach (var elm in before)
{
 File.WriteAllBytes(path: @"d:\a\test.dat", bytes: before);
}

複合
byte[] after = File.ReadAllBytes(path: @"d:\a\test.dat");
for (int i = 0; i < after.Length; i++) {  after[i] ^= 1; } string s = Encoding.UTF8.GetString(bytes: after); メモリー内データ操作 var stream = new MemoryStream();
using (var writer = new StreamWriter(stream, Encoding.Default))
{
 メモリ上にバイト配列を書込
 writer.WriteLine(@"aaa");
}

byte[] b = stream.ToArray();
string s = Encoding.Default.GetString(b);

int data = 0;
try(
  FileOutputStream ostream = new FileOutputStream(new File("C:\\test.txt"));
  FileInputStream istream = new FileInputStream(new File("C:\\test.txt"));
){

 ostream.write(100);
 文字コードを書き込み
 ostream.write("Java".getBytes());

 while((data = istream.read()) != -1){
  System.out.println(data);
 }
 文字は文字コードで出力される
 → 100 74 97 118 97

}catch(Exception ex){
 System.out.println(ex.getMessage());
}finally{
 try-with-resources文内で宣言している為不要
 ostream.close();
 istream.close();

}

int data = 0;
try(
  DataOutputStream ostream = new DataOutputStream(new FileOutputStream(new File("C:\\test.txt")));
  DataInputStream istream = new DataInputStream(new FileInputStream(new File("V:\\test.txt")));
){

 ostream.writeInt(100);
 ostream.writeUTF("Java");

 System.out.println(istream.readInt());
 System.out.println(istream.readUTF());
 → 100 JAVA

}catch(Exception ex){
 System.out.println(ex.getMessage());
}

UTF-8で保存

Dim stream As Object

Set stream = CreateObject("ADODB.Stream")

With stream
 .Charset = "UTF-8"
 .Type = 2
 .Open
 .WriteText = ~
 .SaveToFile ("~.tmp"), 2
 .Close
End With

With CreateObject("ADODB.Stream")
 .Type = 1
 .Open
 .LoadFromFile ("~.tmp") ' 一時ファイルをバイナリで読み取る
 .Position = 3 ' BOMの3バイトを読み飛ばす
 ' 4バイト目から目的のファイルにバイナリで書き込む
 Dim ws: Set ws = CreateObject("ADODB.Stream")
 ws.Type = 1
 ws.Open
 ws.Write (.Read(-1))
 ws.SaveToFile "~", 2
 ws.Close
 .Close
End With

' 一時ファイルの削除
Call CreateObject("Scripting.FileSystemObject").DeleteFile(tmpFile)

Set stream = Nothing

CSV形式
if (($handle = fopen('/var/www/test/test.csv' 'r')) == TRUE ) {
 while (($data = fgetcsv($handle))) {
  1列目、4列目を取得
  echo($data[0]. $data[3])
 }
 fclose($handle);
}

標準(画面)入力

print('入力して下さい')
s = input()

print(s)
→入力した文字

標準(画面)出力

Console.WriteLine(value: @"aaa");

標準入出力
#include <iostream>
#include <string>

Console::WriteLine("aaa");
→aaa

std::string myStr = "bbb";
std::cout << "ccc" << myStr;
→cccbbb

print_r(~)
変数内容出力:型、サイズ情報無し

var_dump(~)
変数内容出力:型、サイズ情報有り

<pre>
var_dump()等
</pre>
変数情報改行

flush();
ob_flush();
画面出力即時反映

print('入力して下さい')
s = input()

print(s)
→入力した文字

標準入力
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
標準出力
System.out.println("input:" + reader.readLine().toString());

echo ~

改行
echo;

メッセージボックス

メッセージボックスを表示する
DialogResult result = MessageBox.Show(
  "メッセージ",
  "キャプション",
  MessageBoxButtons.YesNoCancel,
  MessageBoxIcon.Exclamation,
  MessageBoxDefaultButton.Button2);

何が選択されたか調べる
if (result == DialogResult.Yes)
{
  ~
}
else if (result == DialogResult.No)
{
  ~
}
else if (result == DialogResult.Cancel)
{
  ~
}

常に最前面に表示する
MessageBox.Show(
  メッセージ,
  キャプション,
  MessageBoxButtons.OK,
  MessageBoxIcon.Information,
  MessageBoxDefaultButton.Button1,
  MessageBoxOptions.DefaultDesktopOnly);

Call MsgBox("メッセージ")
Call MsgBox("メッセージ", vbOKOnly)
Call MsgBox("メッセージ", vbOKOnly, "タイトル")
Call MsgBox("メッセージ", vbOKOnly Or vbInformation, "タイトル")

Dim Ret As Long
Ret = MsgBox("メッセージ", vbYesNoCancel + vbQuestion, "タイトル")
If Ret = vbYes Then

ElseIf Ret = vbNo Then

ElseIf Ret = vbCancel Then

EndIf

【ボタン種類】
[OK]
vbOKOnly(0)

[OK]/[キャンセル]
vbOKCancel(1)

[中止]/[再試行]/[無視]
vbAbortRetryIgnore(2)

[はい]/[いいえ]/[キャンセル]
vbYesNoCancel(3)

[はい]/[いいえ]
vbYesNo(4)

[再試行]/[キャンセル]
vbRetryCancel(5)

【アイコン】
警告メッセージ アイコン
vbCritical(16)

問い合わせメッセージ アイコン
vbQuestion(32)

注意メッセージ アイコン
vbExclamation(48)

情報メッセージ アイコン
vbInformation(64)

モーダル設定
メッセージボックスに応答するまで、呼び出し元のアプリケーションは実行不可
vbApplicationModal(0)

モーダル設定
メッセージボックスに応答するまで、全てのアプリケーションが実行不可
vbSystemModal(4096)

最前面表示
VbMsgBoxSetForeground(65536)

【その他】
ヘルプボタン
vbMsgBoxHelpButton(16384)

第1ボタンを標準ボタン設定(既定値)
vbDefaultButton1(0)

第2ボタンを標準ボタン設定
vbDefaultButton2(256)

第3ボタンを標準ボタン設定
vbDefaultButton3(512)

第4ボタンを標準ボタン設定
vbDefaultButton4(768)

【戻り値】
vbOK(1)[OK]
vbCancel(2)[キャンセル]
vbAbort(3)[中止]
vbRetry(4)[再試行]
vbIgnore(5)[無視]
vbYes(6)[はい]
vbNo(7)[いいえ]

【標準】
if ( window.confirm('~です。よろしいですか?') ) {
 YESの時の処理
}

【カスタマイズ】
※親ウィンドウ.html
<script type="text/javascript">
 var url = "Child.html";
 var options =
  "dialogWidth=300px; dialogHeight=300px;" +
  "center=1; status=1; scroll=1;" +
  "resizable=1; minimize=0; maximize=0;";
 var args = new Array('AAA','BBB');

 var ret = window.showModalDialog(url, args, options);
 if (ret){
  document.write(ret + '<br/>');
 }else{
  document.write('無し<br/>');
 }
</script>

※子ウィンドウ.html
<script type="text/javascript">
 onload = function () {
  // showModalDialogの第二引数を取得
  var elm = new Array();
  Array[0] = window.dialogArguments[0];
  Array[1] = window.dialogArguments[1];

  window.alert(Array[0]);
  window.alert(Array[1]);
 }

 function fnClick()
 {
  // showModalDialogの戻り値を設定
  window.returnValue = document.getElementById('myText').value;
  window.close();
 }
</script>

<input type="text" value="値入力" id="myText" /><br/>
<input type="button" value="OK" onclick="fnClick()" /><br />

ログ出力

error_log('文字列', 1, "~@~", "ヘッダー");
メール

error_log('文字列' . '\r\n', 3, "test.log");
ファイル名を指定
改行コード必要

use Illuminate\Support\Facades\Log;

Log::emergency(〜);
Log::alert(〜);
Log::critical(〜);
Log::error(〜);
Log::warning(〜);
Log::notice(〜);
Log::info(〜);
Log::debug(〜)

ログファイル設定
※.env
LOG_CHANNEL=daily
LOG_LEVEL=debug

※/config/logging.php
'default' => env('LOG_CHANNEL', 'stack'),

'channels' => [
 'stack' => [
  'driver' => 'stack',
  'channels' => ['single'],
  'ignore_exceptions' => false,
 ],
 〜
]

※簡易
logger(〜);

/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php
function logger($message = null, array $context = [])
{
 if (is_null($message)) {
  return app('log');
 }
 return app('log')->debug($message, $context);
}

文字列
$this->log('文字列');

DB
$resut = ~->find();
$this->log(print_r($result, true));

log_message('error', $data);
log_message('error', json_encode($data));
import logging as log

ログレベル設定
log.basicConfig(level=log., format=, filename=)
log.basicConfig(level=log.DEBUG, format='%(asctime)s %(levelname)s %(message)s', filename='error.log')
log.basicConfig(level=log.INFO, format=~, filename=~)
log.basicConfig(level=log.WARNING, format=~, filename=~)
log.basicConfig(level=log.ERROR, format=~, filename=~)
log.basicConfig(level=log.CRITICAL, format=~, filename=~)

ログ出力
log.debug('aaaaa')
log.info('aaaaa')
log.warning('aaaaa')
log.error('aaaaa')
log.critical('aaaaa')

2019-09-13 07:16:08,803 DEBUG aaaaa

ログ出力停止
log.disable(log.DEBUG)
この命令以降のDEBUGレベルのログ出力命令は無効かされる

設定ファイル/固定値ファイル入出力

※setting.config
id=php
name=cakephp3

配列
[framework]
PHP=CakePHP
JAVA=Spring
C#=.NetFramework

※~.php
$config = parse_ini_file('setting.config');
$config = parse_ini_file('setting.config', false);

$id = $config['id'];
→php
$name = $config['name'];
→cakephp3

配列
$config = parse_ini_file('setting.config', true);

$framework = $config['framework'];
forearch ($framework as $key => $value) {
 print $key;
 →PHP/JAVA/C#
 print $value;
 →CakePHP/Spring/.NetFramework
}

【bootstrap.phpへの変数定義】
※config\bootstrap.php
define("Cake1","定数");
Configure::write("Cake2", "定数");
Configure::write("Cake3", ["0"=>"php","1"=>"java"]);
Configure::write("Cake4", ["php"=>"CakePHP3","java"=>"Spring"]);

コントローラでの変数呼び出し
use Cake\Core\Configure;

$cake1 = Cake1;
$cake2 = Configure::read("Cake2");
$cake3 = Configure::read("Cake3");
$cake4 = Configure::read("Cake4");

→$cake1:定数
→$cake2:定数
→$cake3[1]:java
→$cake4['php']:CakePHP3

【別ファイルへの変数定義】
※config\const.php
<?php
use Cake\Core\Configure;

return [
 「,」で区切る
  define("Cake1","定数"),
  Configure::write("Cake2", "定数"),
  Configure::write("Cake3", ["0"=>"php","1"=>"java"]),
  Configure::write("Cake4", ["php"=>"CakePHP3","java"=>"Spring"]),
];

※config\bootstrap.php
// 定数ファイル(const.php)読み込み
Configure::load("const");

コントローラでの変数呼び出し
「bootstrap.phpへの変数定義」と同じ

固定値クラス
namespace App\Constants;

class LANG
{
  const INFO = [
    1 => 'PHP',
    2 => 'Python',
    3 => 'Java',
  ];
}

コントローラ/モデル
use App\Constants\LANG;

class XXXXXX extends Model
{
  function XXXXXX(){
    foreach(LANG::INFO as $key => $name){
     ~
    }
 }
}

アプリ設定ファイル
※config\app.php
return [
  'aliases' => [
    ~
    // 定数ファイル
    'LANG' => App\Constants\LANG::class,
  ],
];

ビュー(↑のアプリ設定ファイルへの追記が必要)
@foreach (\LANG::INFO as $key => $name)
 {{$name}}
@endforeach

クリップボード

import pyperclip as clip

クリップボードにコピー
clip.copy('python')

クリップボードから貼り付け
text = clip.paste()
print(text)
→python