@Blog{zip358.com}
日常日誌からプログラムやYOUTUBER紹介、旅日記まで日々更新中です。
画像をタイル状に分離して一括ダウンロードさせるジェネレーター
2019.09.07
画像をタイル状に分離して一括ダウンロードさせるジェネレーターを
作ってみました。画像は自動的に削除されます?
あることをすれば他人の画像がアップした画像も削除されます。
ちなみに一括ダウンロードbuttonを押すと画像がサーバー上に保存され
強制ダウンロードが始まります。
動作はブラウザChromeオンリーです。
また一括ダウンロードを押すと複数のファイルを一括ダウンロードするか
どうかの問い合わせが表示されますので「はい」を
選択してください。尚、30秒以内に保存されていないファイルは
次々と削除されます。
サイトはこちらから
https://zip358.com/tool/demo5/index-14.html
ソースコードは下記になります。
ページ(base64生成+画像ダウンロード処理)
追記:zipファイルにより格納するように処理を変更しました。
参考にしたサイト:https://ex1.m-yabe.com/archives/4215
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>画像分離してダウンロード:画像分離ジェネレーター</title>
<meta name="description" content="画像分離してダウンロード:画像分離ジェネレーター">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="../jquery/jquery-3.4.1.js"></script>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.css">
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-71682075-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-71682075-1');
</script>
<style>
body{
background-color: black;
color: antiquewhite;
}
img{
margin:10!important;
padding:10!important;
}
#container{
width: 100%;
}
#container img{
margin:10px;
}
</style>
</head>
<body>
<span id="bat"></span><a id="dl"></a>
<input class="form-control" type="file"></input>
<div id="container"></div>
<script>
$(function(){
$("[type=file]").on("change",function(){
$('#container').html("");
$("#bat").html("");
console.log($(this));
if(!$(this).prop('files')[0].type.match(/[png|jpg|jpge|gif]/)){
alert("ファイル形式エラー");
return false;
}
var canvas = document.createElement('canvas');
var reader = new FileReader();
reader.onload = function(event) {
var image = new Image();
image.onload = function() {
sprite = {width:50,height:50};
canvas.width = sprite.width;
canvas.height = sprite.height;
var ctx = canvas.getContext("2d");
var x = 0;
for(var i=0; i*sprite.height<image.height; i++){
for(var j=0; j*sprite.width<image.width; j++){
ctx.drawImage(
image,j*sprite.width,i*sprite.height,
sprite.width,sprite.height,
0,0,
sprite.width,sprite.height
);
var spriteElement = new Image;
spriteElement.src= canvas.toDataURL();
$('#container').append(spriteElement);
}
}
$("#bat").html("<input type='button' value='一括ダウンロード' onclick='bat_img()'>");
}
image.src = event.target.result;
}
reader.readAsDataURL($(this).prop('files')[0]);
});
});
function bat_img(){
var data = [];
for(var i=0; i< $("img").length;i++){
data.push({"base64":$("img").eq(i).attr("src"),"no":i});
}
$.ajax({
type: 'POST',
url: 'bat_img.php',
data:{"obj":data},
dataType: 'json'
}).done(function(obj){
if(obj[obj.length - 1 ].chk=="ok"){
var link = document.getElementById("dl");
link.href = obj[obj.length - 1].zippath;
link.download = "zipimg.zip";
link.click();
var data2 = [];
for(var i = 0 ; i < obj.length ; i++){
if(i==0){
data2.push({Path:obj.path,no:obj.no,t:obj.t,"zipimgpath":obj[obj.length - 1].zippath});
}else{
data2.push({Path:obj.path,no:obj.no,t:obj.t});
}
}
var del = function(){
$.ajax({
type: 'POST',
url: './bat_del.php',
data:{"obj":data2},
dataType: 'json'
});
};
del();
}
});
}
</script>
</body>
</html>
<?php
$i=0;
foreach($_POST["obj"] as $key=>$val){
$b64 = base64_decode(str_replace("data:image/png;base64,","",$val["base64"]));
$no = (int)$val["no"];
$t = time();
$Path = "./bat_img/tmp/$t-$no.png.webp";
$re = @file_put_contents($Path,$b64);
if($re){
$obj[$i]["chk"] = $re?"ok":"ng";
$obj[$i]["name"] = "$t-$no.png.webp";
$obj[$i]["path"] = $Path;
$obj[$i]["no"] = $no;
$obj[$i]["t"] = $t;
$i++;
}
}
$obj[--$i]["zippath"] = zipfile($obj);
print json_encode($obj);
function zipfile($obj){
$ZipFiles = function($obj){
foreach($obj as $key=>$val){
$path[] = $val["path"];
}
return $path;
};
$Zip_Files = $ZipFiles($obj);
$zipFileName = time().'_zipimg.zip';
set_time_limit(0);
$zip = new ZipArchive();
$zipTmpDir = './tmp/zip/';
$result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
if( $result !== true ){ //エラー処理
echo 'error!';
exit();
}
foreach ($Zip_Files as $key=>$filepath) {
$filename=basename($filepath);
// ZIP圧縮するファイルを追加
// ファイルパス・ファイル名としないと圧縮ファイルを解凍するとフルパスになる
$zip->addFile($filepath,$filename);
}
//ZIP 出力
$zip->close();
return $zipTmpDir.$zipFileName;
}
<?php
unlink($_POST["obj"][0]["zipimgpath"]);
foreach($_POST["obj"] as $key=>$val){
$Path = $val["Path"];
$no = (int)$val["no"];
$t = (int)$val["t"];
$cmd = function(){
foreach(glob("./bat_img/tmp/*") as $file_name){
$command = "rm -rf " . realpath($file_name);
exec($command);
}
};
if(pathinfo($Path)["extension"]=="png" and preg_match("/bat_img\/tmp/",$Path)){
if(is_file($Path)){
sleep(30);
unlink($Path);
}else{
$cmd();
}
}else{
$cmd();
}
}
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
1, 14, 30, 358, 4, 5, 64, archives, base, button, Chrome, com, demo, ex, html, https, index, m-yabe, tool, www, zip, アップ, オンリー, コード, こちら, こと, サーバー, サイト, ジェネレーター, ソース, タイル, ダウンロード, はい, ファイル, ブラウザ, ページ, 一括, 下記, 他人, 保存, 処理, 分離, 削除, 動作, 参考, 問い合わせ, 変更, 強制, 格納, 生成, 画像, 表示, 複数, 追記, 選択,
変なコードを書いてしまった。それはいつものこと(笑)
2019.08.10
変なコードを書いてしまった。
PHPにstr_repeatという関数が存在しているのだけど
何のために使用するのか全然わからない。関数の内容は任意の文字を
指定回数、繰り返した文字列として返してくれるというものです。
試しにその関数を使用し変なコードを書きました。
茶目っ気ですので…。これがPCに負担がかかるとか
無限ループとかの処理にすると御縄なんでしょうけど・・・。
サンプルコードはこちらから
https://zip358.com/tool/demo5/index-11.php
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="../jquery.tubular.1.0.1/js/jquery.tubular.1.0.js"></script>
<link rel="stylesheet" type="text/css" href="../jquery.tubular.1.0.1/css/screen.css">
<script>
$('document').ready(function() {
var options = {
videoId: '760lRwLKFF0',
mute: true,
};
$('#bgmovie').tubular(options);
});
</script>
<style>
body{
background-color: #000;
color: #fff;
font-size: 80px;
line-height: 80px;
}
p{
color: #38a9c5;
}
</style>
</head>
<body>
<div id="bgmovie">
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="#">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<?php
$str = str_repeat("高知 よさこい 踊る,",7);
var_dump(str_getcsv($str));
?>
<p class="oshite" data-oshite="<?=$str?>"style="text-decoration: underline">▼おして知るべし</p>
※おして知るべしをクリックすると7ウィンドウ開きますよ!!
<?php
foreach(str_getcsv($str) as $val){
?>
<?php
}
?>
</div>
<script>
$(function(){
$(".oshite").on("click",function(){
let oshite = $(this).attr("data-oshite").split(",");
for(var i = 0 ; i < oshite.length ; i++){
if(oshite[i]!==""){
window.open("https://twitter.com/search?src=typed_query&q=" + encodeURIComponent(oshite[i]));
}
}
});
});
</script>
<script src='https://vjs.zencdn.net/7.6.0/video.js'></script>
</body>
</html>
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
--, 11, 358, 5, 7, 8, 9, class, com, demo, DOCTYPE, endif, gt, html, IE, if, index, lt, lt-ie, no-js, PC, php, repeat, STR, tool, zip, いつも, コード, こちら, こと, これ, サンプル, それ, ため, もの, ループ, 任意, 何, 使用, 内容, 処理, 回数, 変, 存在, 指定, 文字, 文字列, 無限, 縄, 茶目っ気, 負担, 関数,
σ(゚∀゚ )オレ的速報:基本情報技術者解答生成ツール
2019.03.10
σ(゚∀゚ )オレ的速報:基本情報技術者解答生成ツール
4月の試験日にお使い頂ければと制作しました。
作った経緯は
自分がスマホからツイートするときに
手入力するのは面倒だったんで
これを作ったのです。
リンク貼っときますね。
https://zip358.com/tool/kihon2/
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
2, 358, 4, com, kihon, tool, zip, オレ, お使い, これ, スマホ, ツール, ツイート, とき, リンク, 制作, 基本, 情報, 手入力, 技術者, 生成, 経緯, 自分, 解答, 試験, 速報, 面倒,
WordPressの全記事の中からランダムで記事をピックアップしてツイートする。
2019.02.22
WordPressの全記事の中からランダムで記事をピックアップしてツイートする。
実際、自分の階層に合わして呼び出しを変更してください。
なお、さくらレンタルサーバーでクロンの設定をして自動投稿できます。
ライブラリの設置などは割愛してます。
<?php
// cron:: cd /home/user/www/zip358.com/site/tw; /usr/local/bin/php tw.php
require_once ('../../wp-load.php');
require "vendor/autoload.php";
use AbrahamTwitterOAuthTwitterOAuth;
$consumer_key = "XXXXXXXXXXXXXX";
$consumer_secret = "XXXXXXXXXXXX";
$access_token = "XXXXXXXXXXXXXX";
$access_token_secret = "XXXXXXXXXXXXXXX";
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
$args = array(
'posts_per_page' => 1,
'orderby' => 'rand'
);
$posts = get_posts($args);
foreach ( $posts as $val ){
$href = get_permalink($val->ID);
$title = get_the_title($val->ID);
$res = $to->post("statuses/update", array("status" => $title . " " . $href));
}
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
358, Abraham, access, autoload, bin, cd, com, consumer, cron, home, key, local, lt, once, php, require, secret, site, tok, tw, TwitterOAuth, use, user, usr, vendor, WordPress, wp-load, XXXXXXXXXXXX, XXXXXXXXXXXXXX, zip, クロン, サーバー, さくら, ツイート, ピックアップ, ライブラリ, ランダム, レンタル, 中, 割愛, 変更, 実際, 投稿, 自分, 自動, 記事, 設定, 設置, 階層,
VBAオブジェクトを自動生成しイベントを付与する。
2019.01.12
VBAオブジェクトを自動生成しイベントを付与する。
サンプルコードです。
ダウンロードはこちら
https://zip358.com/tool/sample.zip
Dim chg_class(0 To 5) As chg
Public Sub objset()
Dim obj_ctl As Control
Dim i As Integer
For i = LBound(chg_class) To UBound(chg_class)
Set obj_ctl = UserForm1.Controls.Add("Forms.TextBox.1", "Box" & i)
obj_ctl.Top = 10 + 20 * i
obj_ctl.Width = 200
obj_ctl.Height = 20
obj_ctl.Text = "ここを変更してみて、またはダブルクリック(" & i & "番)"
Set chg_class(i) = New chg
chg_class(i).set_evn obj_ctl, i
Set obj_ctl = Nothing
Next i
End Sub
Private WithEvents TextB As MSForms.TextBox
Private index_no As Integer
Public Sub set_evn(hoge_obj As MSForms.TextBox, hoge As Integer)
Set TextB = hoge_obj
index_no = hoge
End Sub
Private Sub TextB_Change()
MsgBox TextB.Text 'UserForm1("Box" & index_no)
End Sub
Private Sub TextB_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox TextB.Text 'UserForm1("Box" & index_no)
End Sub
Private Sub TextBox1_Change()
MsgBox TextBox1
End Sub
Private Sub CommandButton1_Click()
End Sub
Private Sub UserForm_Click()
End Sub
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
0, 1, 10, 20, 200, 358, 5, Add, amp, as, Box, chg, class, com, Control, Controls, ctl, Dim, For, Forms, Height, Integer, LBound, obj, objset, public, sample, set, Sub, Text, TextBox, To, tool, TOP, UBound, UserForm, VBA, Width, zip, イベント, オブジェクト, コード, ここ, こちら, サンプル, ダウンロード, 付与, 変更, 自動生成,
年賀状CSVを作りました。SJISで保存してください。
2018.12.30
https://zip358.com/tool/nenga/
ブラウザ上で完結しています。
禁則処理などはありません、ただ純粋に入力したものが
CSV形式の文字列で出力されます。
これ何のために使えるかといえば
https://nenga.yu-bin.jp/
こちらのサイトで住所録を登録する際に使用できます。
タイトルにも描きましたがSJISの文字コードで出力をお願い致します、
また、データベースに保持などはしていないため
リロードしてしまうと全てのデータが消えてしまいます。
これを作った経緯。
自分が郵便年賀.jpで登録するのが面倒だったため作りました。
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
358, com, CSV, jp, nenga, SJIS, tool, yu-bin, zip, お願い, コード, こちら, これ, サイト, タイトル, ため, データ, データベース, ブラウザ, もの, リロード, 住所, 何, 使用, 保存, 保持, 入力, 全て, 処理, 出力, 完結, 年賀, 年賀状, 形式, 文字, 文字列, 登録, 禁則, 純粋, 経緯, 自分, 郵便, 際, 面倒,
DropFTPを配布。
2018.12.01
ドップして一つのファイルを転送するソフトを作りました。
こんなのどうしているのかと疑問を持つ人もいると思いますが
業務上、こんなソフトが要るという会社などもいるのではないかと
思いで作りました。
ダウンロードはこちらから
https://zip358.com/tool/DropFTP.zip
ソースコードは下記になります。
※FTP部分はWinSCPのライブラリを使用しています。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WinSCP;
namespace dropFTP
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void upbtn_Click(object sender, EventArgs e)
{
String err = "";
if (hostText.Text == "") {
err += "ホスト名が設定されていませんn";
}
if (idText.Text == "")
{
err += "IDが設定されていませんn";
}
if (passText.Text == "")
{
err += "passが設定されていませんn";
}
if (remText.Text == "")
{
err += "アップロード場所が設定されていませんn";
}
if (uplab.Text == "")
{
err += "アップロードファイルが設定されていませんn";
}
var RadioGroup = groupFTP.Controls.OfType<RadioButton>().SingleOrDefault(rb => rb.Checked == true);
if (RadioGroup == null) {
err += "アップロード環境が設定されていませんn";
}
if (err != "")
{
MessageBox.Show(err);
}
else {
if (RadioGroup.Text == "FTP") {
upFTP();
}
if (RadioGroup.Text == "SFTP")
{
upSFTP();
}
}
}
private int upFTP() {
try
{
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = hostText.Text,
UserName = idText.Text,
Password = passText.Text,
PortNumber =int.Parse(portText.Text)
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Upload files
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
if (remText.Text.EndsWith("/"))
{
transferResult = session.PutFiles(@uplab.Text, remText.Text, false, transferOptions);
}
else
{
transferResult = session.PutFiles(@uplab.Text, remText.Text + "/", false, transferOptions);
}
// Throw on any error
transferResult.Check();
// Print results
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
MessageBox.Show("アップロードしました");
}
}
return 0;
}
catch (Exception e)
{
MessageBox.Show("Error: {0}" + e);
return 1;
}
}
private int upSFTP()
{
try
{
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = hostText.Text,
UserName = idText.Text,
Password = passText.Text,
PortNumber = int.Parse(portText.Text),
GiveUpSecurityAndAcceptAnySshHostKey = true
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Upload files
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
if (remText.Text.EndsWith("/")) {
transferResult = session.PutFiles(@uplab.Text, remText.Text, false, transferOptions);
} else {
transferResult = session.PutFiles(@uplab.Text, remText.Text + "/", false, transferOptions);
}
// Throw on any error
transferResult.Check();
// Print results
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
MessageBox.Show("アップロードしました");
}
}
return 0;
}
catch (Exception e)
{
MessageBox.Show("Error: {0}" + e);
return 1;
}
}
private void Form1_DragDrop(object sender, DragEventArgs e) {
//e.Effect = DragDropEffects.Copy;
string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop, false);
uplab.Text = fileName[0];
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
private void radioSFTP_CheckedChanged(object sender, EventArgs e)
{
portText.Text = "22";
}
private void radioFTP_CheckedChanged(object sender, EventArgs e)
{
portText.Text = "21";
}
private void Form1_Load(object sender, EventArgs e)
{
this.FormBorderStyle = FormBorderStyle.FixedSingle;
this.MaximumSize = this.Size;
this.MinimumSize = this.Size;
}
}
}
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
358, Collections, com, ComponentModel, data, Drawing, DropFTP, Forms, FTP, Generic, Linq, System, Tasks, Text, Threading, tool, using, Wi, Windows, WinSCP, zip, コード, こちら, ソース, ソフト, ダウンロード, ドップ, ファイル, ライブラリ, 一つ, 下記, 人, 会社, 使用, 業務, 疑問, 転送, 部分, 配布,
javascriptでテキストファイルやCSVファイルを読み込む方法。
2018.11.13
javascriptでテキストファイルやCSVファイルを読み込む方法は下記になります。
この他に、jqueryだとajaxを使用して読み込む方法などもありますが、あえて
javascriptで記述しています。
rt();
function rt(){
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET","xxx.txt",true);
xmlHttp.send(null);
xmlHttp.onload = function(){
var data = xmlHttp.responseText;
}
}
追記:アクセス数が結構あるのでサンプルを作りました。
下記のコードをお試しください。
デモページはこちらになります。
https://zip358.com/tool/demo13/ 【改良前】
https://zip358.com/tool/demo13/index2.php 【ちょっと改良】
https://zip358.com/tool/demo13/index3.php 【もうちょっと改良】
https://zip358.com/tool/demo13/index4.php 【もっと改良】
https://zip358.com/tool/demo13/index5.php 【もっともっと改良】2022年度版
※文字の中にカンマ区切りがあるのには対応してません?
"use strict";
var csv = {
load:async function(filename,id){
await fetch(filename).then(data=>data.text()).then((res)=>{
let result = (res.split("\r\n").map(value=>{
return "<tr>" + (value.split(",").map(val =>{
return "<td>" + val.slice(1, -1) + "</td>";
})).join("") +"</tr>";
})).join("");
if(result){
document.getElementById(id).innerHTML = result;
}
}).catch(m =>{
console.error(m);
});
return true;
}
}
csv.load("xxx.csv", "table");
"use strict";
var csv = {
load:async function(filename,id){
const res = await fetch(filename);
const data1 = await res.text();
let separate1 = /\r\n/;
let separate2 = ",";
let data_tbl = (data1.split(separate1)).map(function(value){
return (value.split(separate2)).map(function(value1){
return value1.slice(1, -1);
});
});
var str = "";
for (const key in data_tbl) {
str+=`<tr>`;
for (const key1 in data_tbl[key]) {
str+=`<td>${data_tbl[key][key1]}</td>`;
}
str+=`</tr>`;
}
document.getElementById(id).innerHTML = str;
return "OK";
}
};
csv.load("xxx.csv", "table");
"use strict";
var csv = {
load: function (filename, id) {
fetch(filename).then(
Response=>{
return Response.text();
}).then(data1 =>{
let separate1 = /\r\n/;
let separate2 = ",";
let data_tbl = (data1.split(separate1)).map(function(value){
return (value.split(separate2)).map(function(value1){
return value1.slice(1, -1);
});
});
var str = "";
for (const key in data_tbl) {
str+=`<tr>`;
for (const key1 in data_tbl[key]) {
str+=`<td>${data_tbl[key][key1]}</td>`;
}
str+=`</tr>`;
}
document.getElementById(id).innerHTML = str;
return "OK";
}).catch(error=>{
console.log("失敗しました" + error);
})
}
};
csv.load("xxx.csv", "table");
"use strict";
var csv = {
load: function (filename, id) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", filename, true);
xmlHttp.send(null);
xmlHttp.onload = function () {
if (xmlHttp.status === 200) {
let separate1 = /\r\n/;
let separate2 = ",";
let data1 = xmlHttp.responseText;
let data_tbl = (data1.split(separate1)).map(function(value){
return (value.split(separate2)).map(function(value1){
return value1.slice(1, -1);
});
});
var str = "";
for (const key in data_tbl) {
str+=`<tr>`;
for (const key1 in data_tbl[key]) {
str+=`<td>${data_tbl[key][key1]}</td>`;
}
str+=`</tr>`;
}
document.getElementById(id).innerHTML = str;
}
};
}
};
csv.load("xxx.csv?123", "table");
"use strict";
var csv = {
load: function (filename, id) {
var data = {};
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", filename, true);
xmlHttp.send(null);
xmlHttp.onload = function () {
if (xmlHttp.status === 200) {
let separate1 = /\r\n/;
let separate2 = ",";
let data_org = xmlHttp.responseText;
let data_en = data_org.split(separate1);
for (let d in data_en) {
data[d] = data_en[d].split(separate2);
}
//data load
var t = document.getElementById(id);
var h = "<table>";
for (var o in data) {
h += "<tr>";
for (var r in data[o]) {
h += "<td>";
h += data[o][r].slice(1, -1);
h += "</td>";
}
h += "</tr>";
}
h += "</table>";
t.innerHTML = h;
}
};
}
};
csv.load("xxx.csv", "table");
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
358, ajax, com, CSV, data, function, GET, https, javascript, jquery, new, null, onload, open, quot, responseText, rt, send, too, true, txt, var, xmlHttp, XMLHttpRequest, xxx, zip, アクセス, コード, こちら, サンプル, テキスト, デモ, ファイル, ページ, 下記, 他, 使用, 方法, 記述, 追記,
映画、億男を観てきましたよ。
2018.10.20
映画、億男を観てきましたよ。
本も持っているですが、映画も良かったです。
ネタバレ無しで書くと自分の感覚とお金持ちの友人、また主人公の
価値観と自分は似ているということです。
それにしても、本からここまで映像化できる大友監督は凄いな。
こういう事が出来る人が羨ましいです。
良かった。 https://t.co/vIdiPKENo2
— 田岡 寿章@taoka_toshiaki🦌 (@taoka_toshiaki) October 19, 2018
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
1053285480576442368, 358, 4167910268, 7, asin, com, jp, mJXZhsVbK, status, Twitter, youtube, zip, お金持ち, ココ, こと, 主人公, 事, 人, 価値観, 億男, 友人, 大友, 感覚, 文庫, 文春, 映像, 映画, 本, 監督, 自分,
映画、検察側の罪人を観てきました。
2018.08.25
こんな見応えある映画は久しぶりだ。
— 田岡 寿章@taoka_toshiaki🦌 (@taoka_toshiaki) August 25, 2018
久しぶりに見応えたっぷりの映画を観てきました、
結構それだけでかなり満足感があります。
ただ、この映画は感動するとかいうストーリー展開はありませんし
悔しい映画でもありません、正義とはなんだということを
この映画を通して考える映画になっていることは
間違いないですね。
※結構、真面目な映画であります。
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
0, 07, 1033207577276952576, 2, 3, 358, 4167907844, asin, com, FBXJVM, http, jp, kensatsugawa-movie, status, Twitter, wzvmvESzuv, youtube, zip, かなり, クリア, こと, ストーリー, セット, それだけ, なん, ファイル, フライヤー, 久しぶり, 二宮和也, 展開, 感動, 映画, 木村拓哉, 検察, 正義, 満足感, 真面目, 結構, 罪人, 見応え,
Accessのさんぷるコードができましたので(´Д`)貼っときます。
2014.08.21
突貫工事で作ったのでバグは多少あると思いますが{例えばsql インジェクション対策とか。}、Accessのsampleコードができましたので貼っときます。なお、これで何が出来るかって言えばDBの修正、追加、削除といった基本的な動きをします{挙動不審ぎみ嘘!?}。若干、ソースコードを弄くれば使い回しが出来るようにしております。飯くったり他のことをしながらもガリガリとコードを書きました。ちなみにAccessのViewerをマイクロソフトからダウンロードすると動作すると思います。ファイルは下記からダウンロードください。 追記:暇な時に改良していきますので( ゚д゚)ノ ヨロシクとコメントも暇があれば書いときます。そして無駄なコードがありますが、それも軽量していくつもりです(`・ω・´)。ちなみにいまはDBを空にすると落ちますので・・・・(直しました。)。?samplezip358.zip?[https://zip358.com/tool/samplezip358.zip][08/21 11:26]
Option Compare Database Public db_x As Long Public max As Variant Function sel_all(tablename As Variant, tal_valname As Variant) As Variant Dim x As Long Dim y As Long Dim sql As String Dim RS As DAO.Recordset Dim db As DAO.Database Dim hoge(999, 999) As Variant Dim val_n As Variant Dim val As Variant Set db = CurrentDb sql = "SELECT * FROM " & tablename & " ORDER BY ID ASC;" MsgBox sql Set RS = db.OpenRecordset(sql) Do Until RS.EOF For y = 0 To UBound(tal_valname) hoge(x, y) = RS.Fields(tal_valname(y)) Next y RS.MoveNext x = x + 1 Loop Set db = CurrentDb sql = "SELECT MAX(ID) as maxs FROM " & tablename & ";" MsgBox sql Set RS = db.OpenRecordset(sql) max = RS.Fields("maxs") db_x = x - 1 Set db = Nothing sel_all = hoge End Function Function up_in(chk As Boolean, tablename As Variant, tal_valname As Variant, tal_val As Variant, ID As Long) As Variant Dim sql As String Dim RS As DAO.Recordset Dim db As DAO.Database Dim hoge_valname As String Dim hoge_val As String Dim hoge As Variant If chk = True Then For i = 0 To UBound(tal_valname) hoge_valname = hoge_valname & tal_valname(i) & ", " Next i hoge_val = sql_str(tal_val, "", "", True) sql = "INSERT INTO " & tablename & " (" & Left(hoge_valname, Len(hoge_valname) - 2) & ")VALUES (" & hoge_val & ");" Else hoge_valn_val = sql_str("", tal_valname, tal_val, False) sql = "Update " & tablename & " Set " & hoge_valn_val & " WHERE ID = " & ID & ";" End If MsgBox sql Set db = CurrentDb db.Execute (sql) Set db = Nothing up_in = True End Function Function del(tablename As Variant, tal_valname As Variant, tal_val As Variant) As Variant Dim sql As String Dim RS As DAO.Recordset Dim db As DAO.Database Dim hoge As Variant sql = "DELETE FROM " & tablename & " WHERE " & tal_valname & " = " & tal_val & ";" MsgBox sql Set db = CurrentDb db.Execute (sql) Set db = Nothing del = True End Function Function sql_str(hoge As Variant, tal_valname As Variant, tal_val As Variant, chk As Boolean) As Variant Dim i As Long Dim hoge_str As Variant If chk = True Then For i = 0 To UBound(hoge) If IsNumeric(hoge(i)) Then hoge_str = hoge_str & hoge(i) & ", " Else hoge_str = hoge_str & "'" & hoge(i) & "', " End If Next i Else For i = 0 To UBound(tal_valname) If IsNumeric(tal_val(i)) Then hoge_str = hoge_str & tal_valname(i) & " = " & tal_val(i) & ", " Else hoge_str = hoge_str & tal_valname(i) & " = '" & tal_val(i) & "', " End If Next i End If sql_str = Left(hoge_str, Len(hoge_str) - 2) End Function
↑クラスdbソースコード
Option Compare Database Dim max As Long Dim ID As Long Dim val_val As Variant Private Sub Form_Load() lod End Sub Sub lod() Dim db As db_db Dim val_name As Variant Dim x As Long Set db = New db_db val_name = Array("ID", "表題", "数値", "文字") val_val = db.sel_all("tableone", val_name) max = db.max + 1 If cmb.ListCount > 0 Then For x = 0 To cmb.ListCount - 1 cmb.RemoveItem 0 Next End If For x = 0 To db.db_x cmb.AddItem val_val(x, 1) Next Set db = Nothing End Sub Private Sub cmb_Click() If cmb.ListIndex >= 0 Then Viw cmb.ListIndex End If End Sub Private Sub del_btn_Click() Dim db As db_db Dim hoge As Variant Set db = New db_db val_name = Array("ID", "表題", "数値", "文字") If ID > 0 And max > 1 Then hoge = db.del("tableone", "ID", ID) End If Set db = Nothing lod End Sub Private Sub in_btn_Click() Dim db As db_db Dim val_name As Variant Dim val As Variant Dim hoge As Variant chkchk val_name = Array("ID", "表題", "数値", "文字") val = Array(max, cmb, suuzi, moji) Set db = New db_db hoge = db.up_in(True, "tableone", val_name, val, max) Set db = Nothing lod End Sub Private Sub upd_btn_Click() Dim db As db_db Dim val_name As Variant Dim val As Variant Dim hoge As Variant chkchk val_name = Array("表題", "数値", "文字") val = Array(cmb, suuzi, moji) Set db = New db_db If ID > 0 And max > 1 Then hoge = db.up_in(False, "tableone", val_name, val, ID) End If Set db = Nothing lod End Sub Sub Viw(i As Long) ID = val_val(i, 0) suuzi = val_val(i, 2) moji = val_val(i, 3) End Sub Sub chkchk() If IsNumeric(suuzi) Then If suuzi > 9999 Then suuzi = 9999 End If Else suuzi = 0 End If If IsNumeric(moji) Then moji = "文字が不正>" & moji End If If IsNumeric(cmb) Then cmb = "文字が不正>" & cmb End If End Sub
↑formソースコード
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
35, 358, access, db, https, sample, samplezip, SQL, Viewer, www, zip, いま, インジェクション, コード, こと, コメント, これ, サンプル, ソース, それ, ダウンロード, つもり, バグ, ファイル, マイクロソフト, ヨロシク, 下記, 他, 何, 修正, 削除, 動作, 嘘, 対策, 工事, 改良, 時, 暇, 無駄, 空, 突貫, 若干, 軽量, 追加, 追記, 飯,