「Csv」を含む日記 RSS

はてなキーワード: Csvとは

2023-04-15

JTC様の"AI"の実態

派遣orパート担当者

「えーっと、ドライブのいつものblacklist_words.csvを開いてっと」

上司からきたチャットにあるとおりに "氏ね" "チューチュー" "ナニカ" を追加してっと」

「あ、NGワードポイントも忘れずにと」

「保存してSlackで報告っと」

なおサービス紹介ページ「AI不適切コメント自動ブロックチューニング可能!」

2023-02-20

どこでもPython

JupyterでとあるWebページデータを整形してCSVにするコード書いた。

データ取得までは気持ちよかった。

でも適当に書いてたか

後で再利用するかもってことで最低限クラスにはまとめるとなったとき

「ガキみたいなコードを書くんじゃねぇ。」

となった。

学ばないね

2023-02-13

anond:20230213171956

インボイスの何が災害

とりあえず

10月導入やめろ、せめて4月しろ、4-9と10-3で分けるのだるい

 12月決算会社?しらん

・経過措置80%50%やめろ、だるい

 ついでに軽減税率もやめろ、軽減するなら0%にしろ、ただし食料品のみな。

四捨五入ルール強制すな、システム変更だるい

 売側と買側の不整合なんて累積しても大した金額にならん。

・適格請求書行事業者リストCSVで公開しろ、1件1件の検索は使えん。

 個人はしゃーない、法人だけでいいから。

・振込手数料、売主負担手数料処理だとめんどいのやめろ。

・というか方針ころころ変えるな、初期の頃から情報追ってて損した。

2023-01-16

chatgptにVirtualDJで出力したcueシートをcsv形式に変換するスクリプトを聞

virtualdjで出力したcueシートを、csv形式に変換するpythonスクリプト実装してください

```python

import csv

def convert_cue_to_csv(cue_file, csv_file):

# cueシートのデータを格納するリスト

cue_data = []

# cueシートのファイルを開く

with open(cue_file, 'r') as f:

# cueシートの各行を処理する

for line in f:

# cueシートの行がトラック情報かどうか判断する

if line.startswith(' TRACK'):

# トラック情報を格納する辞書

track_data = {}

# トラック番号を取得する

track_num = line.split()[1]

track_data['Track Number'] = track_num

# トラックタイプを取得する

track_type = line.split()[2]

track_data['Track Type'] = track_type

# 次の行を処理する

line = f.readline()

# トラック名を取得する

track_name = line.split('"')[1]

track_data['Track Name'] = track_name

# 次の行を処理する

line = f.readline()

# トラックの長さを取得する

track_length = line.split()[3]

track_data['Track Length'] = track_length

# cueシートのデータトラック情報を追加する

cue_data.append(track_data)

# CSVファイルに書き込む

with open(csv_file, 'w', newline='') as f:

# CSVファイルに書き込むためのオブジェクト作成

writer = csv.DictWriter(f, fieldnames=['Track Number', 'Track Type', 'Track Name', 'Track Length'])

# ヘッダーを書き込む

writer.writeheader()

# cueシートのデータを書き込む

writer.writerows(cue_data)

# cueシートのファイル

cue_file = 'example.cue'

# CSVファイル

csv_file = 'example.csv'

# cueシートをCSV形式に変換する

convert_cue_to_csv(cue_file, csv_file)

```

このスクリプトは、cueシートのファイルを開き、トラック情報を取得して、CSVファイル書き込みますトラック情報は、トラック

2022-12-27

ExcelCSVを開くときに前ゼロを維持するだけで神アプリなのになんでしないんだろ

マイクロソフトって頭良くないよな

2022-12-15

anond:20221215142626

なんか状況設定がかなり謎い

セルとか言ってるからおそらく表形式データなのに、元データexcel存在してない状況になってるし

もとがCSVあたりのテキストなんだとしても、もっと手軽にできそう

2022-12-13

anond:20221213142526

windows環境で、CSV出力されたファイルは、だいたいExcel で開くパターンが多く、

Excel は、Unicode を処理できず、Shift_JISしか読めないという...

anond:20221212192725

関係ないっちゃないけどw

あちこちクレカとか電気ガスとか電話とかのWebサイトCSV形式の明細書ダウンロードって機能が、いまだに邪悪Shift_JISエンコーディングで出してくるの、いい加減にヤメろや!

WebサイトHTMLとかは、ほぼほぼ100%ちかくunicode(UTF-8)なのに。

ちょっと前まで、MacクイックルックでそのCSV化け化けで見づらくてしょうがなかったんで、数10年ぶりにAppleScript書いてフォルダアクション文字コード変換仕込んだりするハメになったやんかw VenturaになったらShift_JISでも正常にクイックルックできたけどww

2022-11-15

暇なのでRPA触れてみた

私の見ているのでこういうのがあった

・このページから○○というデータをひっぱる

データcsv

csvを取り込む

csvをもとに○○グラフを作る

これを毎週繰り返せる

・・・これ、普通プログラムRPAって名前つけただけな気がするのだが…

2022-11-11

anond:20221111132850

SQLとかPython使えば良いんじゃないの?(シリマセンケド)

csvを扱うことができるアプリケーションってのは、スプレッドシートなどの表計算ソフトだけではないでしょう。

さくっとGUIってことならば、note pad ++みたいなテキストエディターとか。

2022-10-26

anond:20221026121422

調べた。結構調べた。めっちゃ調べた。

ちなみに、Gmail前提の話。

GASGmailのonCreateDraft的なトリガーとかイベントがあれば楽だったんだけど、無かった。○uck!!

Googleコンタクト敬称を設定できるんだけど、スマート作成とかスマートリプライとかで候補に出てくるかっていうと出てきたり出てこなかったりする。○uck!!

テンプレート変数埋め込みとかもできないみたい。○uck!!厳密にはできるんだけど、結構workaroundな感じですぐ使えなくなりそうだし他人お勧めできない。

てかそもそも、こんなことのためにわざわざGAS使うのがおかしい。

ここまでで1時間くらい使った。まあ勉強にはなったけどそんな回り道をした俺に○uck!!

とりあえず、あなたコピペしてるってことなんで、それ前提でちょっとした効率化を考えてみた。

下準備が面倒だけど。

まず、Googleコンタクト敬称会社役職などを設定する。

https://contacts.google.com/

連絡先がたくさんあるなら、CSVエクスポートしてExcelかスプシで開いて、「Name Suffix」(敬称)「Organization 1 - Name」(会社)「Organization 1 - Title」(役職)の列を一括変更してインポートするのが楽。ちなみに「Name Prefix」はSirとかMr.とか入れるところ。

これで下準備は終わり。

Gmailメール作成するときなど、宛先メールアドレスの脇にそのアイコン名前が出てくる。

で、アイコン名前カーソルを合わせて1秒ほど待つと、↓みたいなポップアップが(Googleコンタクト登録されていれば)敬称付きの名前会社役職と一緒に出てくる。

https://ferret-one.akamaized.net/images/623a863585ad34000174a1e6/large.png

これをコピペすればおk

Googleコンタクトに姓名をどっちも入れると「田中太郎様」ってなるので、そこは名を抜かすなど臨機応変に。

連絡先を全部変更する前に、1件だけ試しでやってみるのをオススメする。

Thunderbird知らない子ですねえ。

Thunderbirdの方も、Googleコンタクトを同期させれば似たような使い方ができるかもしれない。

俺はThunderbirdまともに使ったことないので、有識者に指示を仰いでください。

今は、これが精一杯。

追記

一回のコピペで済ませたいならGoogleコンタクトメモって項目があるので、それでも良いかもしれない。

ただ、ポップアップを表示させた後「詳細表示を開く」ってボタンを押して出てきた右ペインを一番下までスクロールしないとメモが出てこないので、一長一短という感じ。

まああとは色々やってみてくれ。




俺の仕事の話。

メールは俺の方からは全く使わない。

俺にメールしてくるのはお客さんじゃないので、「この度はお世話になります。〇〇社△△部xxと申します」とか「お忙しい中大変恐縮ですが、何卒ご検討のほどよろしくお願い致します」とかかましてきやがったら「自動差し込みとかでない限りそういうのいらないんで。俺からは一切しません」って開口一番に言う。

そういう仕事をしてる。

相手には多分ヤバい奴だと思われてるけど、その方が俺にとっては都合がいい。

メモついでにオススメフリーソフトまとめとく

令和だけど令和っぽくないソフトばかりだが許してくれ、 あとURL書きすぎたら投稿できなかったので気になったのあったら調べてくれ

他にはてなーオススメソフトがあったらたのむ

エディタ

サクラエディタ

言うまでもなく汎用テキストエディタとして超定番

とりあえずファイルの中身を見るためにこういった汎用のエディタは持っておきたい。

Cassava Editor

CSVを見るのに便利な表計算ソフト

個人開発とは思えない機能と使い勝手がスゴい。

vim(windows版32bit)付属のxxd.exe

バイナリの閲覧ソフトはなかなかチョイスが難しい。

定番が古いので乗り換え先を色々試した結果これに落ち着いた。

ファイル操作

Everything

ファイル検索ソフト

探したいファイルが一瞬で出てくるのでおすすめ

7zip

ファイルアーカイバ

これだけあれば世の中の大半のソフト解凍できるのでLhaと頭についてるソフトを使ってるひとは乗り換えよう。

マルチメディア

nkv

シンプルSusieプラグイン対応画像ビューア。

Massigraから乗り換えるのに丁度よかったので是非。

JTrim

シンプルかつ高機能画像エディタ

古いソフトだがこれとペイントさえあれば大抵の場面で足りる。

SumatraPDF

軽いPDFビューア。

PDFを見るだけならこれでいいと思う。

pdf_as

PDF編集ソフト

PDFちょっとした編集ならこれで解決できる。

MPD(Music Player Daemon)

Linux音楽プレイヤーWindows版。

LinuxでMPD使ってる人は入れてみてもいいけど、全くMPDを知らない人は導入クソ面倒だし操作も面倒なので入れなくていいです。

SkyMPC

MPDクライアント

クライアントを入れないとMPDを操作できないので…

忘れてたのあったら追記しま

2022-10-16

DX成功事例自治体実態

とある地方市役所は,自治体DXの進んだ自治体らしい。国だかなんかから表彰とかもされているらしい。


けど,実態はクソ。


まずなにより,職員業務で使うPCが令和対応できないまま令和になって2年以上放置されてたの。下手したらまだ対応してないPCが少なからずあるんじゃないか役所なんて一番和暦を使うとこなのに,エクセルとかセルの書式設定で無理やり令和にしてたの。日付の書式を和暦にするんじゃなくて,日付を年と月日に分けて年の方に「"令和"」って入るようにするってことね。それが2年以上だよ。

それでも,RPAやらなにやら新しいものには手を出すから,DXの推進してる市ですとか対外的にはなってるの。うける。


市役所内でブーイングが出ないかと言われたら,出るんだけど評価する側の部署はさっさと新しくするけど,その他の部署放置外局や支所に至っては存在しない扱い。だから数年放置評価する部署も,聞いたところで疎いから(頭が悪いから)へーそうなんだくらいにしか思わないわけ。だって自分たちは実務してないしさっさとアップデートたから困った経験ないし。

当然Windowsアップデートなんて「え?なにそれおいしいの?」って状態サポート切れてますけど。でも,表彰されるの。


DXとかも,人力で機械様に都合のいいように相当数時間をかけて調整して,機械様がやってるとこだけを取り出して「これだけ効率化されました」とか発表したり取材させたり。そんな切り取られた部分しか表には出てこない。

RPAだってRPAを使うのが目的になってるから継続利用できているのがほぼゼロ複数アプリケーションにまたがって使うならわからなくもないけど,集計につかってるの。説明会に参加した超大手企業担当者も,RPAを使って各支店CSVダウンロードした売上データ分析の集計してんだって。「まじか,日本大丈夫なわけ?」って聞いてて思ったよね。管理画面作るかCSVダウンロードする際にその機能提供してあげたほうがよっぽど効率化じゃないですかね…。行政にはわからんだろうという舐めた営業トークと思いたいけども,実際それで行政が導入してるわけだし営業トークとしては間違ってないんだろう。


そんなこんなで,業務改革のために各部局でRPAを導入しろって方針が出て,もう頭痛いの通り越したよね…。さすがにICTに詳しい非主流派から相当な突き上げ(というか単にどこも継続利用できてないと現実を開示しただけ)があったけど,もう対外的先進地です〜ってなってるからどうにもできない状態


なんでそうなるかって,まぁ(本当は知識のない)担当が上の人のお気に入りっていうのが一番で,かつ,担当実態とは合わないけど財政部局の都合のいいことを言うから財政部局も便利なんだよね。で,虚栄心の塊だから対外的に見栄えのするデジタル事業だけ金つっこみデジタルインフラ?なにそれ?状態アップデートもできてないPCが溜まっていきネットワークも貧弱。修理や機器更新もせず壊れるの待ち。システム導入にするにしても同じ機能なんだから統一すればいいのに各部署でバラバラに導入。さらに,うんこみたいなシステムを導入する。これ行政相手じゃなかったら売り物になってないよね?っていうのが多数。

話がそれるけど,今だにIEのみ対応,画面遷移するたびに数秒またされるみたいなのを最近導入してんの。昔からあるならまだ許されるけど,最近ですよ。ほぼ全職員が使うシステムで画面遷移ごとに数秒待たされる損失ってどんなもんじゃい。業務改革とは?って思うけどまぁわからないよね。上の人たちには。で,先に書いたとおり,詳しい人達邪魔から非主流派になっていくの。

すげーな組織ってこう壊れていいくんだなと思って抜けさせてもらいました。


まぁ,組織が壊れたところで市役所がなくなることはないけども,行政サービスは落ちるだろうし中にいる人も一部以外は疲弊して優秀な人は抜けていくっていう負のスパイラルに陥るんだろうな。DX推進によって地方創生と逆の道をたどっていくのが皮肉というかなんというか。


でも,DXに限らず地方はそうやってずっと衰退いったのかもなって今は思ったりする。

2022-10-07

anond:20221007174034

目的は今の業務関連だと

ホームページ関連や

csv自動処理とか

スマホアプリとの連携とか・・・

こないだは拡張機能とか色々やってて自分でも何やってんだがよくわからない

2022-10-04

社内SEのワイ日記 ==その5==

ワイ「WEBページからAPI使って○○して最終的にはcsvにしてくれるプログラム作ったで!」

同僚A「よくやってくれた、少し重いけど割りと楽になるわ」

同僚B「どのぐらいかかったん?」

ワイ「2週間いかないぐらいかな」

同僚A「結構かかったなw」

ワイ「うるせえww」

ーー帰宅中ーー

ワイ「・・・・・・・・・・・ん?もしかするとアレ使ってであのコマンド使えば楽に作動できないか

結果速度10倍で楽に作動できるのが半日で出来た。

これを初めから思いつきたかった・・・・・

2022-08-31

NGワード一覧ってどうやって用意するのか気になる

郵便番号の一覧とかは郵便局CSVデータ提供してくれている

ゲーム内でのチャットとかのNGワード一覧ってその業界ではほぼ必ず必要なはず

まさか毎回リストを作っているのか?まさかそんなことはないだろう……

新規ゲーム会社を興してゲーム内のチャットシステムを構築しようとした際にNGワードをどうやって用意するんだということだな

こういう「過去に誰かが絶対作っているもの」って再発明しようとするとだるいんだよな……

2022-08-19

コロナ全数把握「現場負担減らしながら対応」 閉会中審査厚労相

 新型コロナウイルスの「第7波」が続くなか、衆院厚生労働委員会は19日、閉会中審査を開いた。医療機関負担となっている患者の「全数把握」の見直しなどのコロナ対策について与野党政府対応をただした。

新型コロナ場合、診察した医師患者の氏名や連絡先といった基本情報を「発生届」としてシステム入力する負担が生じており、見直しを求める声が日本医師会全国知事会などから上がっている。

8/19(金) 11:25配信 朝日新聞DIGITAL

診察が終わった後に,医師がいちいち患者の氏名やら何十ある項目を手入力するのって面倒だよね。しかも,入力する項目って診察時に診た項目でしょ?

二度手間感もありげんなりする。

陽性の患者情報フラグを付けて診察時の情報をそのまま参照データを貼り付けるようにできるようにすれば解決だよね?

特定データCSVファイルにして,新型コロナウイルス感染者等情報把握・管理支援システム(HER-SYS)に取り込めるようにすればいいのにね。

手法問題なのにそれを解決しないで全数把握を見直すだなんて本末転倒

そもそもHER-SYSの要件定義仕様作成時に現場を知らない人たちが作っちゃったからじゃないかな?

よくあることだよね。手間とか処理時間を考えないのは

2022-08-13

anond:20220813223721

書式なしテキストとして貼り付け

csvを読み込んで~、該当列を指定してsumifs関数を使ったんですけど~、0になるんですよ~」

新人エクセルの使い方を隣の席の同僚に聞いているようだった

「ああ、たぶん金額のところがテキストになっているから、csvを読み込みなおして、数値に変換するか、クエリ自体コピペして別のシートに書式なしテキストとして張り付けて、該当行をvalue関数で変換してからsumifsをつかってやるといいよ」

わたしは聞くに堪えないと思い、説明している最中の同僚の胸倉をつかみ、頬を2回叩いた

「round関数が~」、「マクロで~」、「ピボットを~」、それでも同僚は話すのを止めないので、同僚の髪の後ろの主電源を切ったのち、電源を入れなおす

蛍光灯が明滅し、セミの鳴き声が逆再生され、私の思考も溶けていく

「あたいが読み込まれる~」と新人がつまんねえことを言いながら窓を突き破り、宙へ飲み込まれていく

世界再起動され、0と1が書き込まれ新世界想像されていく

わたしは消えゆく思考の中で願った

次の世界薄っぺらい有体の駄文を切ってつないで張り付けたような世界でないことを

※お題からエクセルしかかばなかった

2022-08-01

anond:20220731183342

自動安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋) 

/**************************************

以下のCSV_DIR, FILE_PATHS, SETTINGSを書き換えてね。 <h3>o- *************************************/</h3>

//CSVファイルが置かれてるディレクトリパス投稿前にエラー出たら大体ここの設定ミス。 例:"C:\\Users\\sakuraimasahiro\\Documents\\iMacros\\Macros\\rentou\\";

const CSV_DIR =

'C:\\Users\\USER\\Desktop\\iMacros\\Macros\\rentou\\';

//ファイルパスCSV絶対パスで、拡張子必要。iimは相対パスでよく、拡張子不要

const FILE_PATHS = {

//投稿文が書かれたCSVファイル

textCsv: CSV_DIR + 'textNoAnker.csv',

//レス投稿文が書かれたCSV。通常とレス用で分けないなら同じファイルを使えばいい。

replyTextCsv: CSV_DIR + 'textReply.csv',

};

const SETTINGS = {

//投稿後の基本待ち時間

baseWaitTime: 5,

//baseWaitTime+0~waitTimeRange(ランダム)だけ待つ

waitTimeRange: 5,

//連投しすぎだと忠告された場合に処理を一時停止させる時間(秒)

waitTimeForAvoidingPunishment: 60 * 30,

//メール

mail: 'sage',

//名前設定

nameSettings: {

//名前名無しなら''。

name: '',

//以下、偽装ワッチョイ設定。浪人ワッチョイを非表示にしてるときだけtrueにしてね。

//妙なニックネーム(ワッチョイ、アウアウウーなど)をランダムで決めて付加するかどうか。true=付加する。false=付加しない。

nickname: false,

//妙なニックネームの後に付く8桁の文字列ランダムで決めて付加するかどうか。

korokoro: false,

//IPランダムで決めて付加するかどうか。

ip: false,

//地域ランダムで決めて付加するかどうか。

area: false,

},

postSettings: {

//アンカー無し投稿をするならtrue。しないならfalse。noAnkerPostかreplyPostのどちらかはtrueにすること(両方trueでもOK)。

noAnkerPost: false,

//アンカー付き投稿(返信)をするならtrue。しないならfalse。もしnoAnkerPostとreplyPostの両方がtrue場合投稿は返信が優先され、返信対象が見つからなくなったらアンカー無し投稿をする。

replyPost: true,

//最初に取得するアンカー無し投稿CSVファイルの行番号。もし返信用と同じCSVファイルを使うなら-1と入力

noAnkerPostTextCsvStartRow: 1,

//最初に取得する返信用投稿CSVファイルの行番号。もしアンカー無しと同じCSVファイルを使うなら-1と入力

replyPostTextCsvStartRow: 1,

//テキストCSV/返信用テキストCSVの取得行が最終行に達したら最初の行まで戻るかどうか。true=戻る。false=マクロ終了。

textCsvLoop: true,

//返信する場合、これより小さなレス番には返信しない。返信を投稿すると、この数値は前回の返信先のレス番に更新される。

minAnker: 895,

//返信する場合名前に以下の文字列を含む投稿アンカーをつけて返信する(ワッチョイやIPなど名前フィールドにあるものならなんでも可)。配列複数指定可能指定無しなら空配列([])。filterNamesとfilterNamesNotIncluded共に無指定ならレス番1から順に返信していく(minAnkerが設定されてればそこから順に)。以下のfilter系は全て併用可能

filterNames: [],

//↑とは逆に、名前に以下の文字列を含まない投稿アンカーをつけて返信する。↑と併用も可能

filterNamesNotIncluded: [],

//返信する場合、本文に以下の文字列を含む投稿アンカーをつけて返信する。

filterText: ['自演かな', '自演わらわら', 'スクリプト使うの', '安価ガバ', '>>660', '自演擁護', '最後' ,'あいうえお', 'かきくけこ', 'さしすせそ', 'なにぬねの', 'はひふへほ', 'まみむめも', 'やいゆえよ', 'やゆよ', 'らりるれろ', 'わいうえを', 'わをん', 'わいうえをん'],

},

//自分IPアドレス確認VPNとかでIPを変更してマクロを動かしてるとき、突然VPN作動しなくなってIPが元に戻ったときマクロを止めるためのもの

ipSettings: {

//自分現在IPアドレス確認をする。

checkIp: true,

//以下の文字列自分現在IPアドレスに含まれている場合マクロを一時停止する。基本的自分の本当のIPアドレス入力

avoidTheIp: '133.206.99.224',

},

//浪人設定。最後動作確認したのは5年くらい前で、今も同じように動作するかは、浪人を持ってないか確認できずわからない。

roninSettings: {

//浪人ログインしてるかどうかをチェックするかどうか。trueらするfalseならしない。trueにしていてもし浪人ログインしていないことを確認したらログインしにいく。

checkLogin: false,

//浪人ログインメールアドレス

mailAdress: 'abc@def.com',

//浪人ログインパスワード

password: '1234',

},

//false: run()実行させず(デバッグ用)

run: true,

//true: 投稿処理だけしない デバッグ

skipPost: false,

};

/**************************************

設定箇所終わり。

書き込めない時の早見表 - 5ちゃんねるwiki

https://info.5ch.net/index.php/%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%81%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E6%97%A9%E8%A6%8B%E8%A1%A8 <h3>o- *************************************/</h3>

/**************************************

メモ

クラスフィールド宣言できない。

・NULL演算子(??)は使えない。論理積(&&)は使える。

オブジェクトの分割代入はできない。

・importはできない。 <h3>o- *************************************/</h3>

/**************************************

関数 <h3>o- *************************************/</h3>

/**

* ここから始まる。

*/

function run() {

//設定ミスがないか調べる。

checkSettings();

var _TextCsvCursors = new TextCsvCursors(

new TextCsvCursor(

SETTINGS.postSettings.noAnkerPostTextCsvStartRow > 0

? SETTINGS.postSettings.noAnkerPostTextCsvStartRow - 1

: SETTINGS.postSettings.noAnkerPostTextCsvStartRow,

FILE_PATHS.textCsv,

SETTINGS.postSettings.textCsvLoop,

),

new TextCsvCursor(

SETTINGS.postSettings.replyPostTextCsvStartRow > 0

? SETTINGS.postSettings.replyPostTextCsvStartRow - 1

: SETTINGS.postSettings.replyPostTextCsvStartRow,

FILE_PATHS.replyTextCsv,

SETTINGS.postSettings.textCsvLoop,

),

);

var _LoopStatuses = new LoopStatuses(0, SETTINGS.postSettings.minAnker);

const _MyPosterName = new MyPosterName({

name: SETTINGS.nameSettings.name,

});

//スレURL指定

const _ThreadUrl = openPromptThreadUrl();

//ループ

while (true) {

//IP確認する設定なら、それをする。

SETTINGS.ipSettings.checkIp && checkCurrentIpNotTheIp();

//スレを開く

openUrl(_ThreadUrl.fullUrlHttps());

//浪人ログインする設定なら、浪人ログインしているかどうかを確認し、していなければログインしにいく。

if (SETTINGS.roninSettings.checkLogin) {

if (!checkRoninLogin()) {

loginRonin();

continue;

}

}

//投稿に使うテキスト取得。

const p = (function () {

if (SETTINGS.postSettings.replyPost) {

//返信あり設定の場合。返信対象が無いか調べる。

const targetAnkerNumber = createPostDOMList()

.filterPostnumberHigher(_LoopStatuses.currentMinAnker())

.filterByPostername(SETTINGS.postSettings.filterNames)

.filterByPosternameNotIncluded(

SETTINGS.postSettings.filterNamesNotIncluded,

)

.filterByText(SETTINGS.postSettings.filterText)

.lowestPostNumber();

if (targetAnkerNumber !== null) {

//返信対象があったのでアンカー付き投稿文を作る。

const r = _TextCsvCursors.takeNextRowTextAsReply(targetAnkerNumber);

messageDisplay(`返信対象有り。アンカー先: ${targetAnkerNumber}`);

return {

...r,

updatedLoopStatuses:

_LoopStatuses.updateMinAnker(targetAnkerNumber),

};

}

}

if (SETTINGS.postSettings.noAnkerPost) {

//返信対象無し、或いは返信しない設定の場合アンカー無し投稿文を作る。

const r = _TextCsvCursors.takeNextRowTextAsNoAnker();

messageDisplay('返信対象無し。アンカー無し投稿。');

return {

...r,

updatedLoopStatuses: _LoopStatuses,

};

}

return null;

})();

if (p) {

//投稿

postThenCheckError(

_ThreadUrl.serverName(),

_MyPosterName.randomize({

nickname: SETTINGS.nameSettings.nickname,

korokoro: SETTINGS.nameSettings.korokoro,

ip: SETTINGS.nameSettings.ip,

area: SETTINGS.nameSettings.area,

}),

SETTINGS.mail,

p.text,

);

//_TextCsvCursorsと_LoopStatusesを更新

_TextCsvCursors = p.updatedTextCsvCursors;

_LoopStatuses = p.updatedLoopStatuses.incrementPostCount();

messageDisplay([

`投稿回数: ${_LoopStatuses.currentPostCount()}`,

`minAnker: ${_LoopStatuses.currentMinAnker()}`,

`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,

`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,

]);

} else {

messageDisplay([

`返信対象が現われるのを待機中...。`,

`投稿回数: ${_LoopStatuses.currentPostCount()}`,

`minAnker: ${_LoopStatuses.currentMinAnker()}`,

`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,

`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,

]);

}

//短時間で連投しまくると規制されるので一定時間待機。

wait(SETTINGS.baseWaitTime + randomRange(0, SETTINGS.waitTimeRange));

}

}

/**

* 投稿処理と投稿結果を見てリトライしたりマクロ終了したり。

* @param {string} serverName サーバー

* @param {MyPosterName} _MyPosterName

* @param {string} postMail メール

* @param {MyText} _MyText

* @param {number} retryTimes

* @returns {void}}

*/

function postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes = 0,

) {

const r =

retryTimes === 0

? new ValuesOfPost(serverName, _MyPosterName, postMail, _MyText).post(

postTo5chTread,

postConfirm,

)

: new ValuesOfPost(

serverName,

_MyPosterName,

postMail,

_MyText,

).postSubstring(retryTimes, postTo5chTread, postConfirm);

if (r) {

back();

return;

}

//エラーページに飛ばされた。エラー情報取得。

wait(7);

const error = createPostErrorMessage().analyze();

messageDisplay(error.message);

if (error.order === 'KILL') {

kill();

} else if (error.order === 'SKIP') {

return;

} else if (error.order === 'TRUNCATE') {

back();

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes + 1,

);

} else if (error.order === 'WAIT') {

wait(SETTINGS.waitTimeForAvoidingPunishment);

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes,

);

} else if (error.order === 'LOGIN') {

//動作未確認

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes,

);

}

return;

}

/**

* 現在IPアドレスに、SETTINGS.ipSettings.avoidTheIpの値が含まれていないことを確認する。含まれていたらマクロを一時停止。

* @returns

*/

function checkCurrentIpNotTheIp() {

//IP確認ページへ飛ぶ

openUrl('https://www.cman.jp/network/support/go_access.cgi');

const _IpAdress = createIpAdressFromCMan();

if (_IpAdress.includes(SETTINGS.ipSettings.avoidTheIp)) {

pause('現在IP指定した値が含まれていることを確認。');

//ポーズ解除したならもう一度確認しに。

checkCurrentIpNotTheIp();

}

return;

}

/**

* 設定に致命的な問題が無いか検査

* @returns

*/

function checkSettings() {

if (

SETTINGS.postSettings.noAnkerPost === false &&

SETTINGS.postSettings.replyPost === false

) {

return kill('設定エラー。noAnkerPostとreplyPost両方ともfalseになってる。');

}

if (

SETTINGS.postSettings.noAnkerPostTextCsvStartRow < 0 &&

SETTINGS.postSettings.replyPostTextCsvStartRow < 0

) {

return kill(

'設定エラー。noAnkerPostTextCsvStartRowとreplyPostTextCsvStartRow両方とも-1になってる。',

);

}

if (

SETTINGS.postSettings.noAnkerPostTextCsvStartRow === 0 ||

SETTINGS.postSettings.replyPostTextCsvStartRow === 0

) {

return kill(

'設定エラー。noAnkerPostTextCsvStartRow/replyPostTextCsvStartRowの初期値は-1或いは1以上で。',

);

}

}

/**

* 入力フォームを表示して入力されたスレURLを受け取る。

* @returns {ThreadUrl}

*/

function openPromptThreadUrl() {

const url = prompt('スレURL入力');

return new ThreadUrl(url);

}

/**

* 開いてるスレレス全て読み取ってPostListインスタンスを作って返す。

* 重すぎるので使うのやめ。どうやらインスタンスの大量生成が原因な模様。

* createPostDOMListを使う。

* @returns {PostList}

*/

function createPostList() {

const posts = window.document.getElementsByClassName('post');

return new PostList(Array.from(posts).map((e) => new Post(e)));

}

/**

* 開いてるスレレス全て取得してPostDOMListに格納して返す。

* @returns

*/

function createPostDOMList() {

const posts = window.document.getElementsByClassName('post');

var arrPostDOMList = [];

for (let index = 0; index < posts.length; index++) {

//HTMLCollectionからElementを1つずつ抽出して配列に。

arrPostDOMList.push(posts.item(index));

}

return new PostDOMList(arrPostDOMList);

}

/**

* 開いてる投稿結果画面に表示されてるエラーを読み取ってPostErrorMessageインスタンスを作って返す。

* @returns {PostErrorMessage}

*/

function createPostErrorMessage() {

return new PostErrorMessage(

window.document

.g Permalink | 記事への反応(0) | 15:40

anond:20220801094651

海外ではExcelはほぼCSVとピボットテーブルだけで使ってるところも多いよな

無意味だと分かってるからゴテゴテ装飾しない

2022-06-14

anond:20220614154214

増田に大きめのテーブルを書き込むときにいったんExcelで作ってCSV形式で出力して,を|に置き換えとるやで

2022-06-02

業務システム開発する時によく必要になる機能

他にもあるのだろうか。

ログイン ユーザー登録
ようこそ ゲスト さん