シート間の差分を出すやつ

先日Excelを購入したこともあり、vbaを最近使用している。
シート間の差分を出すコードを書いてみた。差分があった行をマーキングするようにした。
※コードの中には、途中経過を把握するためにイミディエイトウィンドウに表示する情報もそのまま残している。

Option Explicit

Sub sample()
    
    Application.ScreenUpdating = False


    Dim num As Long
    num = Cells(Rows.Count, 2).End(xlUp).Row


    Dim i As Integer
    i = 0
    
    Dim j As Integer
    j = 0

    Dim k As Integer
    k = 0


    Dim m As Variant
    m = 0
    
    i = 8
    j = 3
    k = 4
    
    Dim ans As Variant
    ans = 0
    

    Dim arr() As Variant
    ReDim arr(100)
    
    
    Dim l As Integer
    l = 0
    
    
For i = 8 To 12
    With ActiveSheet
        Debug.Print i - 7
        Debug.Print "-----"
             
        For k = 4 To 10
            On Error GoTo Err_Label
            m = WorksheetFunction.Match(Cells(i, j), Worksheets(.Previous.Name).Cells(3, 3).EntireColumn, 0)
            ans = WorksheetFunction.Index(Worksheets(.Previous.Name).Range("$A$1:$Z$20"), m, k)
            arr(k - 4) = WorksheetFunction.CountIf(Worksheets(.Previous.Name).Cells(m, k), Cells(m, k))

            If arr(k - 4) >= 1 Then
                l = l + 1
            ElseIf arr(k - 4) = 0 Then
                '
            End If

            Debug.Print ans
            Debug.Print "arr:" & arr(k - 4)
            Debug.Print "wwww"
          
        Next
        
        Debug.Print "-----"
        
        If l = 7 Then
            Debug.Print "完全一致"
            l = 0
        Else
            For k = 4 To 11
                Cells(i, k - 1).Interior.Color = RGB(255, 255, 0)
                Debug.Print "新規"
            Next
            l = 0
        End If
       
    End With
Next

Exit Sub

Err_Label:
    MsgBox "見つかりませんでした。エラーコードは次の通りです。" & Err.Number & "," & Err.Description

    On Error GoTo 0
    
    Resume Next

End Sub

電卓作ってる

Python入門ということで電卓作ってる。とりあえず画面表示ができた。(このページも逐次更新していく予定)

#!/usr/bin/env/python

# -*- coding: utf8 -*-
# -*- coding: ascii -*-

import sys

import Tkinter as Tk

import numpy as np

i = 0
j = 0  
array = [['7','8','9','*'],['4','5','6','-'],['1','2','3','+'],['0','.','/','=']]   
strings = 0

def CulcValue(event):
            count = 0
            if count == 0:

         if array[i][j] == array[0][3] :
                    mul = 0
            mul += 1 #*
            count += 1
             elif  array[i][j] == array[1][3] :
            sub = 0    
            sub += 1 #-
            count += 1
             elif  array[i][j] == array[2][3] :
            add = 0    
            add += 1 #+
            count += 1
             elif  array[i][j] == array[3][1] :
            dec = 0    
            dec += 1 #.
            count += 1
             elif  array[i][j] == array[3][2] :
            div = 0    
            div += 1 #/
            count += 1
         elif  array[i][j] == array[3][3] :
            equ = 0
            equ += 1 #= 
            count += 1 
            if mul == 1:
                strings = value1*value2
                var.set(strings)
            elif sub == 1:
                strings = value1-value2
                var.set(strings)
            elif add == 1:
                strings = value1+value2
                var.set(strings)
            elif div ==1:
                strings = value1/value2
                var.set(strings)
            else:
                pass
             else:
               value1 = array[i][j]
      
            elif count == 1:
          value2 = array[i][j]
            else:
         pass

class Frame(Tk.Frame):
    def __init__(self,master=None):
        Tk.Frame.__init__(self,master,height=200,width=200)
        self.master.title('Nested Frames')
        
        var = Tk.StringVar()
        var.set("0")
    
        f_display = Tk.Frame(self,relief=Tk.RIDGE,bd=4)
        f_display.pack(fill=Tk.X,expand=1)

        display = Tk.Label(f_display, text=var,width=10, relief=Tk.SUNKEN, bd=2, anchor = Tk.E,font=('Helvetica', '24'), bg='white')
        display.grid(row=0, column=1, rowspan=2, sticky=Tk.N+Tk.S)   
        
        #Second Frame
        f2 = Tk.Frame(self,relief=Tk.RIDGE,bd=2)
        f2.pack(pady=2)
    
#      array = [['7','8','9','*'],['4','5','6','-'],['1','2','3','+'],['0','.','/','=']]   
        
        for i in range(4):
             for j in range(4):
                button = Tk.Button(f2,text=array[i][j])
            button.grid(row=i,column=j) 
        #f2.place(relx=0,rely=0)
                button.bind("<Button-1>", CulcValue)

if __name__ == '__main__':
    f = Frame()
    f.place()
#  f.pack()
    f.grid()
    f.mainloop()

FizzBuzzに関する5つの問題を解いた

Qiitaを眺めていたら、面白い記事を見つけた。 qiita.com ということで、僕も解いてみた(発展質問はまだ解いてない)

[質問1] 1から100までの数をプリントするプログラムを書けるか?

#include<stdio.h>

int main(void)
{
        int i;
        for (i=1;i<=100;i++)
        {
                printf("%d\n",i);
        }
return 0;
}

[質問2] 3の倍数なら「Fizz」 5の倍数なら「Buzz」 両方の倍数なら「FizzBuzz

  1 #include<stdio.h>
  2 
  3 int main(void)
  4 {
  5 
  6         int i=1;
  7 
  8         while(i<100)
  9         {
 10                 if((i%3 == 0)&&(i%5 == 0)) printf("FizzBuzz\n");
 11                 else if(i%3 == 0) printf("Fizz\n");
 12                 else if(i%5 == 0) printf("Buzz\n");
 13                 else printf("%d\n",i);
 14                 i++;
 15         }
 16 return 0;
 17 
 18 }

[質問3] FizzBuzzを関数に分割できるか?

  1 #include<stdio.h>
  2 
  3 void toFizzBuzz(int n);         
  4 
  5 int main(void)
  6 {
  7         int i = 1;
  8 
  9         while(i<=100) 
 10         {
 11                 toFizzBuzz(i);
 12                 i++;
 13         }
 14         return 0;
 15 }
 16 
 17 
 18 
 19 void toFizzBuzz(int n)
 20 {       
 21   if ((n%3 == 0)&&(n%5 == 0)) printf("FizzBuzz\n");
 22   else if(n%3 == 0) printf("Fizz\n");
 23   else if(n%5 == 0) printf("Buzz\n");
 24   else printf("%d\n",n);
 25 }

[質問4] FizzBuzzユニットテストを書けるか?

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<string.h>

#define N 256
char fizzbuzz[30]="FizzBuzz";
char fizz[30]="Fizz";
char buzz[30]="Buzz";

char *toFizzBuzz(int n);

int main(void)
{
         int i = 1;
         while(i<=100)
          {
             assert(toFizzBuzz(2)=="FizzBuzz");
             toFizzBuzz(i)
             printf("%s\n",toFizzBuzz(i)); 
         i++;
          }
    return 0;
 }
  
  
  
char *toFizzBuzz(int n)
{
    
    if ((n%3 == 0)&&(n%5 == 0)){      
       return "FizzBuzz";

    }else if(n%3 == 0){
       return  "Fizz";
   
    }else if(n%5 == 0){
       return  "Buzz";
   
    }else{
        static int tes;
        tes = n;
        static char s1[N] = {'\0'};
        sprintf(s1,"%d",tes);
        return s1;

    }
   
}

[質問5] HTML出力とテキスト出力を簡単にスイッチできるようにできるか?

これに関しては、元の記事の関数の処理のsprintfの出力文字列に指定してある記法で表記できることをゴールとした。 また、実行した際に、scanfでどちらにスイッチするか聞けるようにした。

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<string.h>

#define N 256

static  int flag1=0;
static  int flag2=0;
static  int flag3=0;
//char ans[30]={'\0'};
char fizzbuzz[30]="FizzBuzz";
char fizz[30]="Fizz";
char buzz[30]="Buzz";

//int num = 0;

char *toFizzBuzz(int n);
char *html_printer(char *elements);
char *text_printer(char *elements);

int main(void)
{
         int i = 1;
     char s[N];
     char text[50] = {'\0'};

     printf("html出力?:Y/N");
     scanf("%s",text);
      while(i<=100)
          {
        if(text[0] == 'Y')
        {
            char *ans = toFizzBuzz(i); //ここはhtml出力用
            printf("%s\n",html_printer(ans)); 
            }else{
            char *ans = toFizzBuzz(i); //ここはtext出力用
            printf("%s\n",text_printer(ans)); 
        }
        i++;
          }
    return 0;
 }
  
  
  
char *toFizzBuzz(int n)
{
    
    if ((n%3 == 0)&&(n%5 == 0)){      
       return "FizzBuzz";

    }else if(n%3 == 0){
       return  "Fizz";
   
    }else if(n%5 == 0){
       return  "Buzz";
   
    }else{
    static int tes;
        tes = n;
    static char s1[N] = {'\0'};
    sprintf(s1,"%d",tes);
    return s1;
    }
}


char *html_printer(char *elements)
{
    static char s[] = {'\0'};
        int len = 0;
    int i = 0;

    len = strlen(elements);//文字列の要素数取得
    
    for(i=0; i<len; i++)
    {
        sprintf(s,"<li>%s</li>\n",elements);       
    }
    
    return s;
}

char *text_printer(char *elements)
{
    static char s2[] = {'\0'};
        int len = 0;
    int i = 0;

    len = strlen(elements);//文字列の要素数取得
    
    for(i=0; i<len; i++)
    {
        sprintf(s2,"{%s}\n",elements);     
    }
    
    return s2;
}

ひとこと掲示板作成(PDO接続編)

前回http://ma-swan.hatenablog.com/entry/2019/02/22/013654、パーフェクトPHPの6章の「ひとこと掲示板作成」をlaravelのクエリビルダを用いて作成した。
ところで、僕が読んでいるパーフェクトPHP(第5刷)ではPHP5.3.2を使用することを前提に書かれている。
そのため、この「ひとこと掲示板作成」では、mysql_connect()を用いてDBに接続するようにコーディングされている。
しかし、mysql_ で始まる関数は、PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除された。現在では生PHPでDBに接続するためには、PDOまたはMySQLiを使用する。
そこで今回は、laravel使用環境だが勉強のためあえてPDO接続でDB接続をしてみた。
(※勿論、第5刷の時点でPDOについては11章で触れている。サンプルプログラムではmysql_connect()を使用しているという意味。最新版は未確認。)
また、PDOのクラスが存在しないというエラーが表示されることがあり、調べていると、php.iniを編集して、extension=php_pdo.dllを追記すべきという記事が多々見つかる。しかし、PHP 5.3 以降はこの工程が不要となっている。PHP公式マニュアル参照:

http://php.net/manual/ja/pdo.installation.php このエラーはOnelinebbsController2.phpのnamespaceの後にuse PDO;を追記することで解決した。

使用言語:PHP
使用フレームワーク:laravel

C:\xampp\htdocs\laravelapp>php --version
PHP 7.1.9 (cli) (built: Aug 30 2017 18:37:35) ( ZTS MSVC14 (Visual C++ 2015) x86 )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
C:\xampp\htdocs\laravelapp>php artisan --version
Laravel Framework 5.5.12
OnelinebbsController2.php

<?php
//OnelinebbsControllerのデータベースPDO接続版

namespace App\Http\Controllers;
use PDO;
use Illuminate\Http\Request;
use App\Http\Requests\RubihuriRequest;
use Validator;
use Illuminate\Support\Facades\DB;
use App\Http\Requests\OnelinebbsRequest;

class OnelinebbsController2 extends Controller
{
    public function bbs_index2(Request $request)
    {
        //echo phpinfo();
        try{
            $dbh = new PDO(
                'sqlite:C:\xampp\htdocs\laravelapp\database\keijiban_database.sqlite',
                '',
                '',
                array(
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_EMULATE_PREPARES => false,
                )
            );

        //全体表示処理
            $prepare = $dbh->prepare('SELECT * FROM bbs');
            $prepare->execute();
            $result = $prepare->fetchAll(PDO::FETCH_ASSOC);

        } catch (PDOException $e) {

            $error = $e->getMessage();

        }
        //var_dump($result); 
        return view('layouts.bbs2',['items'=>$result]); 
        
        $dbh = null;
    }

    public function bbs_post(OnelinebbsRequest $request)
    {   
        /*
         bbs_postでは実際の画面表示はしない。画面遷移の処理である。
            最終的にリダイレクトして全体表示している。
        */
        date_default_timezone_set('Asia/Tokyo');
        
        try{
            $dbh = new PDO(
                'sqlite:C:\xampp\htdocs\laravelapp\database\keijiban_database.sqlite',
                '',
                '',
                array(
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_EMULATE_PREPARES => false,
                )
            );

            $date= date("Y/m/d H:i:s");
        //insert処理
            $prepare = $dbh->prepare('INSERT INTO bbs VALUES(:name,:comment,:date)');
            $prepare->bindValue(':name',(int)$request->name,PDO::PARAM_STR);
            $prepare->bindValue(':comment',(int)$request->comment,PDO::PARAM_STR);
            $prepare->bindValue(':date',(int)$date,PDO::PARAM_INT);
            $prepare->execute();
            $result = $prepare->fetchAll(PDO::FETCH_ASSOC);

        } catch (PDOException $e) {

            $error = $e->getMessage();

        }

        return redirect('/onelinebbs');
        
        $dbh = null;
    }
}
bbs2.blade.php

<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>ひとこと掲示板</title>
    </head>
    <body>
        <h1>ひとこと掲示板</h1>

        @if(count($errors)>0)
        <p>入力に問題があります。再入力してください。</p>
        @endif

        <table>
            <form action="/onelinebbs2" method="post">
                {{ csrf_field() }}
                @if($errors->has('name'))
                    <tr><th>ERROR</th><td>{{$errors->first('name')}}</td></tr>
                @endif

                <tr><th align="left" valign="middle">名前:</th><td><input type="text" name="name" value="{{old('name')}}"></td></tr><!--入力値はnameとして扱われる-->

                @if($errors->has('comment'))
                    <tr><th>ERROR</th><td>{{$errors->first('comment')}}</td></tr>
                @endif

                <tr><th align="left" valign="middle">ひとこと:</th><td><input type="text" name="comment" size="60" value="{{old('comment')}}"></td></tr>
                <tr><th></th><td><input type="submit" name="submit" value="送信"></td></tr>
            </form>
        </table>
        
        <table border="0">
            @foreach ($items as $key => $value)
                <ul>
                    <li>
                    {{$value['id']}} : {{$value['name']}} {{$value['comment']}} - {{$value['date']}};
                    </li>
                </ul>
            @endforeach
        </table>

    </body>
</html>
web.php

Route::get('onelinebbs_pdo','OnelinebbsController2@bbs_index2');

参考文献

qiita.com

Outlookで選択したアイテムを任意のフォルダ作成して格納したい

表題通り。普段メーラーOutlookを使っている。ファイルを別ディレクトリの中に分別して格納することがあるのだが、これを自動化した。

Sub sample()

 '   Application.ScreenUpdating = False

    Dim path As String
    Dim fso As Object
    Dim sunday As Date
    Dim monday As Date
    Dim foldername As String
    Dim inumber As Integer
    Dim i As Integer
    'Dim oFolder As Outlook.Folder 'フォルダ
    Dim nowitem As MailItem 'メールアイテム
    Dim nowdate As String
    Dim nowsbjct As String
    Dim ary As Variant '不可文字削除用配列
    Dim r As Integer
    Dim flname As String
    Dim PathAry As Variant 'path用配列

    Dim outlookObj As Outlook.Application 'サブフォルダの設定
    Dim myNameSpace, objmailItem As Object
    Dim InboxFolder, subfolder As Long


'    Set outlookObj = CreateObject("Outlook.Application")
'    Set myNameSpace = outlookObj.GetNamespace("MAPI")
'    Set InboxFolder = myNameSpace.GetDefaultFolder(6)
'    Set subfolder = InboxFolder.Folders("******")



    ary = Array("RE: ", "FW: ", "\", "/", ":", "*", "?", "<", ">", "|", """", "[", "]", ",")

    'Date減算
    monday = now - 7
    sunday = now - 1


    foldername = Format(monday, "yyyy年mm月dd日") & "~" & Format(sunday, "yyyy年mm月dd日")
'    Debug.Print foldername

    Set fso = CreateObject("Scripting.FileSystemObject") 'フォルダを作成するための専用のオブジェクト(インスタンス)
'
'
    PathAry = Array("test", "\test", "\test", "\test", "\test", "test", "\", "")
    PathAry(UBound(PathAry)) = foldername

' 
    path = Join(PathAry, "")

    'Debug.Print path
    fso.CreateFolder path 'フォルダの作成


'
    inumber = Application.ActiveExplorer.Selection.Count '選択中のアイテム数を取得

    'Debug.Print inumber

    For i = 0 To inumber - 1 
'
        Set nowitem = Application.ActiveExplorer.Selection.Item(i + 1) 'i番目のアイテムの定義
'
        nowsbjct = nowitem.Subject '件名(?)
        'nowdate = nowitem.ReceivedTimeここは関係ない

        'Debug.Print nowsbjct

        For r = 0 To UBound(ary)
            nowsbjct = Replace(nowsbjct, ary(r), "")
        Next r

        flname = nowsbjct & ".msg" 'ファイル名生成

'        Debug.Print flnam    

        'nowitem.SaveAs path & flname, olMSG

        nowitem.SaveAs path & "\" & flname, olMSG 'ファイル保存




    Next i

        Set fso = Nothing
        Set nowitem = Nothing

End Sub

ひとこと掲示板作成

パーフェクトPHPhttps://www.amazon.co.jp/dp/B00P0UDWQY/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1を読んでいると、6章で「ひとこと掲示板作成」を行うことになる。せっかくlaravelも同時に学んでいることだし、これをlaravelで作成しなおしてみた。

使用言語:PHP
使用フレームワーク:laravel

C:\xampp\htdocs\laravelapp>php --version
PHP 7.1.9 (cli) (built: Aug 30 2017 18:37:35) ( ZTS MSVC14 (Visual C++ 2015) x86 )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
C:\xampp\htdocs\laravelapp>php artisan --version
Laravel Framework 5.5.12
OnelinebbsController.php

<?php
//パーフェクトPHP6章のlaravel版

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\RubihuriRequest;
use Validator;
use Illuminate\Support\Facades\DB;
use App\Http\Requests\OnelinebbsRequest;

class OnelinebbsController extends Controller
{
    public function bbs_index(Request $request)
    {
        $items = DB::table('bbs')->get();
        return view('layouts.bbs',['items'=>$items]); 
    }

    public function bbs_post(OnelinebbsRequest $request)
    {   
        /*
         bbs_postでは実際の画面表示はしない。画面遷移の処理である。
            最終的にリダイレクトして全体表示している。
        */
        date_default_timezone_set('Asia/Tokyo');
        
        $param = [
            'name' => $request->name,
            'comment' => $request->comment,
            'date' => date("Y/m/d H:i:s"),
        ];
        DB::table('bbs')->insert($param);
        // DB::table('bbs')->insert($param); 
        return redirect('/onelinebbs');
    }
}
bbs.blade.php

<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>ひとこと掲示板</title>
    </head>
    <body>
        <h1>ひとこと掲示板</h1>

        @if(count($errors)>0)
        <p>入力に問題があります。再入力してください。</p>
        @endif

        <table>
            <form action="/onelinebbs2" method="post">
                {{ csrf_field() }}
                @if($errors->has('name'))
                    <tr><th>ERROR</th><td>{{$errors->first('name')}}</td></tr>
                @endif

                <tr><th align="left" valign="middle">名前:</th><td><input type="text" name="name" value="{{old('name')}}"></td></tr>

                @if($errors->has('comment'))
                    <tr><th>ERROR</th><td>{{$errors->first('comment')}}</td></tr>
                @endif

                <tr><th align="left" valign="middle">ひとこと:</th><td><input type="text" name="comment" size="60" value="{{old('comment')}}"></td></tr>
                <tr><th></th><td><input type="submit" name="submit" value="送信"></td></tr>
            </form>
        </table>
        
        <table border="0">
            @foreach ($items as $item)
                <ul>  
                    <li>
                        {{$item->name}}:{{$item->comment}}-{{$item->date}}
                    </li>
                </ul>
            @endforeach
        </table>


    </body>
</html>
OnelinebbsRequest.php

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class OnelinebbsRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        if ($this->path() == 'onelinebbs2') 
        {
            return true;
        }else{
            return false;    
        }
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required',
            'comment' => 'required',
        ];
    }

    public function messages()
    {
        return [
            'name.required' => '名前は必ず入力してください。',
            'comment.required' => 'コメントが必要です。',
        ];
    }
}
web.php

Route::get('onelinebbs','OnelinebbsController@bbs_index');
Route::post('onelinebbs','OnelinebbsController@bbs_post');

実行結果

f:id:ma_swan:20190227222345p:plain
通常処理
f:id:ma_swan:20190227222204p:plain
バリデーション処理

ルビ振りAPIを使ってみる

最近PHPを勉強している。どうせなら何か作ってみたいなと思っていたところ、ルビ振りAPIhttps://developer.yahoo.co.jp/webapi/jlp/furigana/v1/furigana.htmlというものを見つけたのでこれを用いてMVCモデルを作成した。

使用言語:PHP
使用フレームワーク:laravel

C:\xampp\htdocs\laravelapp>php --version
PHP 7.1.9 (cli) (built: Aug 30 2017 18:37:35) ( ZTS MSVC14 (Visual C++ 2015) x86 )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

C:\xampp\htdocs\laravelapp>php artisan --version
Laravel Framework 5.5.12
RubihuriController8.php

<?php
//RubihuriController7.phpのクエリビルダ版

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\RubihuriRequest;
use Validator;
use Illuminate\Support\Facades\DB;

class RubihuriController8 extends Controller
{
    public function rubihuri_index(Request $request)
    {
        $items = DB::table('rubihuri')->get();
        return view('yahoo.rubihuri_index',['items'=>$items]);
    }

    public function rubihuri_post(Request $request)
    {
        $items = DB::table('rubihuri')->get();
        return view('yahoo.rubihuri_index',['items'=>$items]);
    }   

    public function add(RubihuriRequest $request)
    {
        return view('yahoo.rubihuri7');
        //$items = DB::table('rubihuri')->get();
        //return view('yahoo.rubihuri5',['items' => $items]);
    }

    public function create(RubihuriRequest $request)    
    {
    
        $api = 'http://jlp.yahooapis.jp/FuriganaService/V1/furigana';
        $appid = '*****************************';

        $msg = $request->input_value;
        $params = array(
            'sentence' => $msg
        );

        $ch = curl_init($api.'?'.http_build_query($params)); //curl_init() cURL セッションを初期化する
        curl_setopt_array($ch, array(
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_USERAGENT      => "Yahoo AppID: $appid"
        )); //CURL 転送用の複数のオプションを設定する
 
        $result = curl_exec($ch);
        curl_close($ch);

        $obj = simplexml_load_string($result);
        $json = json_encode($obj,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); //取得したxmlをjsonに変換している
        $array = json_decode($json ,true);

        $string1 = $array["Result"]["WordList"]["Word"][0]["Furigana"];
        $string2 = $array["Result"]["WordList"]["Word"][1]["Furigana"];
        $string_linking = $string1 . $string2;

        $param = [
            'input_value' => $request->input_value,
            'string_linking' => $string_linking,
        ];
        DB::table('rubihuri')->insert($param);
        return redirect('/rubihuri8');
    }

    public function edit(Request $request)
    {
        $item = DB::table('rubihuri')->where('id',$request->id)->first();
        return view('yahoo.edit2',['form'=>$item]);
    }

    public function update(Request $request)
    {
        $param = [
            'string_linking' => $request->string_linking
        ];
        DB::table('rubihuri')->where('id',$request->id)->update($param);
        return redirect('/rubihuri8');
    }
}
rubihuri_index.blade.php

@extends('layouts.helloapp2')

@section('title','ルビ振りAPI   -test')

@section('menubar')
    @parent
    インデックスページ
@endsection

@section('content')
    <table border="0">
    <tr><th>input_value</th><th>string_linking</th></tr>
    @foreach ($items as $item)
        <tr>      
                <td>{{$item->input_value}}</td>
                <td>{{$item->string_linking}}</td>
        </tr>
    @endforeach
    </table>
@endsection


@section('content2')
    @component('components.message')
        @slot('msg_title')
            mainページ
        @endslot

        @slot('msg_content')
            ここはデータ全体を表示するページです。
        @endslot
    @endcomponent
@endsection


@section('footer')
copyright 2019 ma_swan
@endsection
helloapp2.blade.php

<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>@yield('title')</title>      
        <link rel="stylesheet" href="css/styles.css">
    </head>

    <body>
        <h1>@yield('title')</h1>
        @section('menubar')
        
        <ul>
            <p class="menutitle">helloapp2.blade.php(親)/rubihuri_index.blade.php(子)使用</p>
            <li>@show</li>
        </ul> 

        <hr size="1">
        
        <div class="content" align="center">
            @yield('content')
        </div>
        
        <div class="content2">
            @yield('content2')
        </div>

        <div class="footer">
            @yield('footer')
        </div>
        
    </body>
</html>
rubihuri7.blade.php

@extends('layouts.helloapp3')

@section('title','ルビ振りAPI   -test')

@section('menubar')
    @parent
    新規フィールド追加ページ
@endsection

@section('content')
    <table border="0">
    <form action="/rubihuri8/add" method="POST">
        {{csrf_field()}}
        @if($errors->has('input_value'))
            <tr><th>ERROR</th><td>{{$errors->first('input_value')}}</td></tr>
        @endif
        <tr><th>input_value: </th><td><input type="text" name="input_value"></td></tr>
        <tr><th></th><td><input type="submit" value="send"></td></tr>
    </form>
    </table>
@endsection

@section('content2')
    @component('components.message')
        @slot('msg_title')
            Addページ
        @endslot

        @slot('msg_content')
            ここは新規フィールド追加のページです。
        @endslot
    @endcomponent
@endsection

@section('footer')
copyright 2019 ma_swan
@endsection
helloapp3.blade.php

<!DOCTYPE html>
<html lang="ja">
    <head>    
        <title>@yield('title')</title>      
        <link rel="stylesheet" href="../css/styles.css">
    </head>

    <body>
        <h1>@yield('title')</h1>
        @section('menubar')
 
        <ul>
            <p class="menutitle">helloapp3.blade.php(親)/rubihuri7.blade.php(子)使用</p>
            <li>@show</li>
        </ul> 

        <hr size="1">
        
        <div class="content" align="center">
            @yield('content')
        </div>
        
        <div class="content2">
            @yield('content2')
        </div>

        <div class="footer">
            @yield('footer')
        </div>
        
    </body>
</html>
edit2.blade.php

@extends('layouts.helloapp4')

@section('title','Edit')

@section('menubar')
    @parent
    更新ページ
@endsection

@section('content')
    <table border="0">
        <form action="/rubihuri8/edit" method="post">
            {{ csrf_field() }}
            <input type="hidden" name="id" value="{{$form->id}}">

            <tr>
                <th>string_linking: </th>
                <td><input type="text" name="string_linking" value="{{$form->string_linking}}"></td>
            </tr>

            <tr>
                <th></th>
                <td><input type="submit" value="send"></td>
            </tr>

        </form>
    </table>

@endsection

@section('content2')
    @component('components.message')
        @slot('msg_title')
            Editページ
        @endslot

        @slot('msg_content')
            ここは入力値の修正用のページです。
        @endslot
    @endcomponent
@endsection

@section('footer')
copyright 2019 ma_swan
@endsection
helloapp4.blade.php

<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>@yield('title')</title>
        <link rel="stylesheet" href="../css/styles.css">
    </head>

    <body>
        <h1>@yield('title')</h1>
        @section('menubar')
        
        <ul>
            <p class="menutitle">helloapp4.blade.php(親)/edit2.blade.php(子)使用</p>
            <li>@show</li>
        </ul>

        <hr size="1">
        
        <div class="content">
            @yield('content')
        </div>
        
        <div class="content2">
            @yield('content2')
        </div>
        

        <div class="footer">
            @yield('footer')
        </div>
        
    </body>
</html>
RubihuriValidator.php

<?php
namespace App\Http\Validators;

use Illuminate\Validation\Validator;

class RubihuriValidator extends Validator
{
    //このメソッドではマッチしなかったら1を返す。
    public function validateRubihuri($attribute,$value,$parameters)
    {
        if(preg_match("/^[a-zA-Z0-9]+$/", $value)===0) return 1;
    }
}
message.blade.php

<style>
    .message{
        border: double 4px #ccc; 
        margin: 10px; 
        padding:10px; 
        background-color:#fafafa; 
    }
    
    .msg_title{
        margin: 10px 20px; 
        color:#333; 
        font-size:16pt; 
        font-weight: bold; 
    }

    .msg_content{
        margin: 10px 20px; 
        color:#333;
        font-size: 12pt;
    }
</style>

<div class="message">
        <p class="msg_title">{{$msg_title}}</p>
        <p class="msg_content">{{$msg_content}}</p>
</div>
styles.css

body{
    font-size: 16pt;
    font-family: Verdana,sans-serif;
    /*color:#999; */
    /*color: rgb(0,255,0);*/
    color:#333;
    margin:5px;
}

h1{ /*ここは「ルビ振りAPIてすと」のところ*/
    font-size: 30pt; 
    /*text-align: right; */
    text-align: center; 
    /*color: #f6f6f6; */
    /*color: rgb(0,255,0);*/
    color: #333; 
    /*margin:-20px 0px -30px 0px; */
    margin:0px 0px 0px 0px;
    letter-spacing: -4pt;
}

ul{ /*ここは「インデックスページ」のところ。*/
    font-size: 20pt;
    text-align: center;
    list-style: none;
}

hr{
    margin: 25px 100px; 
    border-top:1px dashed #ddd; 
}

.menutitle{/*※メニューのところ。classには.で対応する。*/
    font-size: 20pt; 
    font-weight: bold; 
    margin: 0px;
    color: #333;
}

.content{ /*content全体の設定*/
    margin:0px;

    /*text-align: right;*/
}



table{/*テーブルを表示しているところ*/
    margin:0px;
}
.footer{
    text-align: right;
    font-size: 10pt; 
    margin: 10px;
    border-bottom: solid 1px #ccc;
    color: #ccc;
}

th{
    background-color:#999; 
    color:#fff; 
    padding:5px 10px; 
}

td{
    border: solid 1px #aaa; 
    color:#999; 
    color:#333; 
    padding:5px 10px;
    font-size: 15px;    
}

td:hover{
    color:crimson;
}       

input:hover{
    color:royalblue;
}
RubihuriServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
use Validator;
use App\Http\Validators\RubihuriValidator;

class RubihuriServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        $validator = $this->app['validator'];
        $validator->resolver(function($translator, $data, $rules, $messages)//オリジナルバリデータを追加
        {
            return new RubihuriValidator($translator, $data, $rules, $messages);
        });
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}
RubihuriRequest.php

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class RubihuriRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        if($this->path() == 'rubihuri8/add')
        {
            return true;
        }else{
            return false;
        }    
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'input_value'=>'rubihuri',
        ];
    }

    public function messages()
    {
        return [
            'input_value.rubihuri'=>'日本語で入力してね。',
        ];
    }
}
web.php

<?php
use App\Http\Middleware\HelloMiddleware;

Route::get('rubihuri8','RubihuriController8@rubihuri_index');
Route::post('rubihuri8','RubihuriController8@rubihuri_post');
Route::get('rubihuri8/add','RubihuriController8@add');  
Route::post('rubihuri8/add','RubihuriController8@create');
Route::get('rubihuri8/edit','RubihuriController8@edit');
Route::post('rubihuri8/edit','RubihuriController8@update');