「string」を含む日記 RSS

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

2021-05-31

https://github.com/kokorohamoe/OpenProfile/blob/master/700_sample/Java/Jurina/reader.cpp

とてもシンプルコード

int main(int argc,const char*argv[]){

int v;

char buffer[1024];

while(1){

printf("input\n");

scanf("%s%d",buffer,&v);

if(strcmp(buffer,"print")==0)

fprintf(stderr, "public class base{\n"

"public static void main(String[] args){\n"

"int i = %d;\n"

"System.out.println(i);}}\n",v);

}

return 0;

}

jurina

cat filename.jurina

print "Hello world";

という命令ファイルから受け取ったら

public class filename{

public static void main(String[] args){

System.out.println("Hello world");

}

}

と出力するプログラムをjurinaと名付けるとする

cat filename.jurina

int i=1;

print i;

public class filename{

public static void main(String[] args){

int i=1;

System.out.println(i);

}

}

ものすごく単純なPythonっぽい独自言語

Javaに置き換えて出力するだけのJava プリプロセッサである

さて、このJurina言語JAVA VMで動くと思うか?

   

言いたいことVMを解析して、OPコードを吐くコンパイラを作ろうとしていたが

そもそもコンパイラが作れるならJavaソースコードを吐いてしまえば良いことに気がついた

2021-05-18

javaString a = new java.util.Scanner(System.in).nextLine();」

pytnon「a =input()」

java冗長すぎかよ糞言語だな

2021-05-04

anond:20210426025101

public class Main {

public static void main(String args[]) {

System.out.println("ア゙ァーッ ォギョヴァアア!!");

}

}

2021-04-23

anond:20210423131826

愚直にやるとしたらstring化して"."でsplitしてint arrayを作って

ループindex小さい方から比較する方法かなあ

JavaScript簡単な例を書いてみた

(ちょっと直した)

https://jsfiddle.net/gea5nm2f/

https://jsfiddle.net/1y5ewcu7/

実際にはバージョンクラスとか比較用のヘルパーみたいなのは

言語で利用しやす状態になってることは少なくないかな~

2021-03-28

[]2021年3月27日土曜日増田

時間記事文字数文字数平均文字数中央値
009610833112.841.5
01717854110.647
02456951154.567
03263787145.770.5
04143140224.352
05171924113.278
0619152180.154
07444749107.943
08477325155.946
09758094107.943
1088863498.141.5
11528150156.753
128110264126.741
1380706388.338
1489803590.342
15717499105.637
1611613466116.155.5
171871707491.343
1810513272126.465
1965584589.941
201331233192.740
2114615193104.143.5
2214016781119.942
2313719912145.353
1日1944219697113.046

本日の急増単語 ()内の数字単語が含まれ記事

池内(7), afa(3), リアルフォース(3), 赤潮(3), ディスクシステム(3), String(3), 5d2(3), c65(3), 古谷(3), c73(3), 398円(3), 聖火(3), ひろゆき(13), ぶつかり(10), 五輪(17), ぶつかっ(12), 美し(7), ファミマ(5), 意図的(6), ウマ(5), 飲める(5), シン(7), 女性差別(11), 明治(7), 転換(6), お菓子(10), 本屋(6), キーボード(7), 明るい(6), irasutoya(8), 思いつく(5), 素人(20), 英語(28), yahoo(13), c(11), 現象(12), 乗る(10), 狙っ(9), 集まる(9), 潰し(9), オリンピック(12)

頻出トラックバック先 ()内の数字は被トラックバック件数

最近ネット見ていると「素人時代」が終わったんだなと悲しい /20210326175758(35), ■全然使われないダースかい単位 /20210327082442(14), ■英語を喋るしか能がない人 /20210327201219(12), ■名前みたいな姓ってどんなのがある? /20210326143830(12), ■癌で死ぬ男と分子標的薬(抗がん剤) /20210326173438(11), ■初代ゼルダの伝説は最高のゲームである。 /20210327082514(11), ■日に日にサウナ雰囲気が悪くなっている /20210326160158(10), ■ブクマカは自らが4610であることを自覚せよ /20210326185842(9), ■いいねRTを欲しがる創作界隈の人に思うこと /20210327160215(8), ■東京はなにもかにもが高い /20210327090622(7), ■はてな冷笑系クラスタたち一覧 /20210327175320(7), ■ジェンダーフリーの50年後 /20210327111830(7), ■ガチ人生変えたい どうしたらいいの? /20210327001758(7), ■女性にわざとぶつかりにくる男について /20210327210556(6), ■#werise という反コロナイベントが行われる /20210326191647(6), ■金玉吸って!!😠 /20210327071218(6), ■東山動物園でも行くか /20210327123938(6), ■ /20210327173520(6), ■本末転倒感のする行動 /20210327102411(5), ■アンチフェミとは何か /20210327000305(5), ■昔大好きだったダイの大冒険リメイクアニメについて思うこと。 /20210327202353(5), ■オリンピックパートナー≒不買推奨企業リスト になったよね /20210327124416(5), ■フェミニズムってそもそも弱者男性を想定してるのかしら? /20210327000111(5), ■多様性大事っていう人は差別主義者だよね /20210327170749(5), ■凡人がはてな匿名ダイアリーという村を見つけました。 /20210325224726(5), ■全員Amazonハチャメチャ配達員みたいになればいいのに /20210326182722(5), ■彼女がいないと言い張る男 /20210326130831(5), ■キモいオタクツイッターアカウント絶対書いてること /20210327024609(5), ■小汚い爺が歩きタバコしてた /20210327093929(5)

2021-03-27

anond:20210327213156

きょうのC#勉強LINQのSortBy()で止まった

参考書かにアルファベット順って呑気に書いてあるけどこれいわゆるASCII順だよねと思って

(彼らが揃いも揃ってアルファベットだけで構成された単語比較例だけしか出さず、数字開始あり・空白ありの文字列比較をさせないのは怠慢だと思う)

比較に使ってるメソッドなんだろうと思って、String.CompareToからString.Compareに行ってCompareOptionsを見て、

.NET での文字列の比較に関するベスト プラクティス | Microsoft Docs

うわー、うん、なんか見なかったことにしておく

もし俺が参考書書くときアルファベットだけで構成された単語比較例だけ出すことにしようと思う

anond:20210327222756

まぁstringはSystem.Stringエイリアスからstringのほうがいい。

intはSystem.Int32のエイリアスなんだけど、ふつーintを使って、Int32なんて使わないでしょ。

boolとSystem.Booleanも同じかな。

https://stackoverflow.com/questions/7074/what-is-the-difference-between-string-and-string-in-c

エイリアスなんで、パフォーマンスには全く関係いから、ぶっちゃけなんだっていいと思う。

anond:20210327213156

ずっと思ってるんだけど、List<string> って List<String> じゃ駄目なの?

2021-03-20

anond:20210320174526

7と8。

技術的なところが気になる人はこれだけ読んでくれたらいい

7. アプリケーションコード自体はRocketChatのものとほぼ同じ

最後技術的な観点からエアレペルソナが純国産ではないということを指摘する。

結論から先に述べると、このアプリは純国産ではない。

RocketChatという海外で開発されたOSSチャットアプリフォーク、改変したもののよう。

ttps://github.com/RocketChat/Rocket.Chat.ReactNative

ttps://rocket.chat

フォーク元はバリバリ多国籍外資である。(RocketChat自体問題のないアプリであり、このエアレペルソナとはフォーク関係を超える関係はないと思われる)

冒頭のこの部分に関してである

ttps://play.google.com/store/apps/details?id=chat.airlex.reactnative

Google Playで公開されているエアレペルソナAndroidアプリリバースエンジニアリングして調べてみた。

ちなみに、エアレペルソナには利用規約のようなものは見当たらず、リバースエンジニアリング禁止条項も無いようだった。

ttps://apps.evozi.com/apk-downloader/

ttps://github.com/pxb1988/dex2jar

この辺を使ってapkダウンロードし、apk解凍し、chat.airlex.reactnative/classes.dexjar fileに変換した。

classes.dexから変換されたjarファイルを展開するとchat/airlex/reactnativeというフォルダパッケージが見つかる。

このパッケージ内のファイル(.classクラス)がエアレペルソナの処理を行うもののようである

特徴的なクラスにEjsonという名前のものがある。

このクラスJadを使い、デコンパイルしてみた。その結果が以下である

ttp://www.javadecompilers.com

ちなみにここからapkアップロードするとdex2jarをしなくてもJavaソースコードにまでデコンパイルしてくれた。便利。

package chat.airlex.reactnative;

import android.content.Context;
import com.ammarahmed.mmkv.SecureKeystore;
import com.facebook.react.bridge.ReactApplicationContext;
import com.tencent.mmkv.MMKV;

public class Ejson {
    private String TOKEN_KEY = "reactnativemeteor_usertoken-";
    String cardId;
    String host;
    String messageId;
    String messageType;
    /* access modifiers changed from: private */
    public MMKV mmkv;
    String msg;
    String notificationType;
    String rid;
    Sender sender;
    String senderName;
    String type;

    public Ejson() {
        ReactApplicationContext reactApplicationContext = CustomPushNotification.reactApplicationContext;
        if (reactApplicationContext != null) {
            MMKV.initialize((Context) reactApplicationContext);
            new SecureKeystore(reactApplicationContext).getSecureKey(C0617Utils.toHex("com.MMKV.default"), new RNCallback() {
                public void invoke(Object... objArr) {
                    if (objArr[0] == null) {
                        MMKV unused = Ejson.this.mmkv = MMKV.mmkvWithID("default", 1, objArr[1]);
                    }
                }
            });
        }
    }

    public String getAvatarUri() {
        if (this.type == null) {
            return null;
        }
        return serverURL() + "/avatar/" + this.sender._id + "?rc_token=" + token() + "&amp;amp;rc_uid=" + userId();
    }

    public String token() {
        String userId = userId();
        MMKV mmkv2 = this.mmkv;
        return (mmkv2 == null || userId == null) ? "" : mmkv2.decodeString(this.TOKEN_KEY.concat(userId));
    }

    public String userId() {
        String serverURL = serverURL();
        MMKV mmkv2 = this.mmkv;
        return (mmkv2 == null || serverURL == null) ? "" : mmkv2.decodeString(this.TOKEN_KEY.concat(serverURL));
    }

    public String privateKey() {
        String serverURL = serverURL();
        MMKV mmkv2 = this.mmkv;
        if (mmkv2 == null || serverURL == null) {
            return null;
        }
        return mmkv2.decodeString(serverURL.concat("-RC_E2E_PRIVATE_KEY"));
    }

    public String serverURL() {
        String str = this.host;
        return (str == null || !str.endsWith("/")) ? str : str.substring(0, str.length() - 1);
    }

    public class Sender {
        String _id;
        String username;

        public Sender() {
        }
    }
}

フィールド名を見てみると、cardId, host, messageId, messageType, mmkv, msg, notificationType, rid, sender, senderName, typeが存在する。

メソッドには、getAvaterUri、token、userId、privateKey、severURLが存在する。

ところで、RocketChatというOSSチャットアプリ存在する。

ttps://rocket.chat

そのRoketChatのAndroid実装の中に同名のEjsonというクラス存在する。

ttps://github.com/RocketChat/Rocket.Chat.ReactNative

ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/android/app/src/play/java/chat/rocket/reactnative/Ejson.java

見比べてみると、フィールドにcardIdが追加されている以外はフィールドメソッド名、そしてその処理の内容まで一致している。

他にもReplyBroadcastなど、同様のクラスがエアレペルソナに見つかる。

以上のことからエアレペルソナはRocketChatをフォークして、パッケージ名を変えて作られたチャットアプリであり、開発の大部分はRocketChat社の努力と多数のOSSコントリビュータによってなされたものであると思われる。

これを純国産日本製と呼ぶには大分無理がある気がする。

そもそもこのOSS時代に純だの何だの言っている時点で怪しい。

8. OSSライセンスに関して

さて、エアレペルソナがRocketChatをフォークして作られたものであるとすると、気になるのはライセンスである

RocketChatのOSSライセンスMITライセンスである

ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/LICENSE

MITライセンスは非常に緩いライセンスであるため、エアレペルソナの様にフォークして別のアプリケーションとして公開することにはおそらく問題がないということは強調しておく。

現状エアレペルソナログインできておらず(2要素認証コード送信されないといった問題が起きている模様)、使用している各OSSライセンス表示が適切に行われているかまでは調べられていない。

2021-03-04

javascriptに詳しい人、教えてくれぇええ~~

ツクールゲーム作ってみたくてプラグイン見てるんだが

DWindow.jsっていうののプログラムの流れが分からんのだ。

部分的抜粋しているが、

        if (arguments.length &lt; 2) min = -Infinity;
        if (arguments.length &lt; 3) max = Infinity;
        return (parseInt(value, 10) || 0).clamp(min, max);

これがさっっっぱり分からん。Infinityは何処から出てきた?

10か0かっていうのも、窓の数は最大10って書いてあったが、それが問題なのか?

min,maxはどこから来たんだ…。

やりたいのが、これと同じように「変数」の値を設定するとして、

その変数には配列を入れたいと思っているんだ。

配列ループして色々確認したいのだが、そもそも配列はどうやってやるん?となってる。

getParamNumber配列はできるのか…?

Numberだけでなく、String配列も使う予定だ。うーーーーーーーーーーーん。

javascript勉強サイト確認したら分かるものなのか?

もっとソース貼ろうとしたら、匿名ダイアリーに怒られたので載せられん…。

すまんが、詳しい人教えてくれ。

2021-01-20

anond:20210120180109

山括弧stringスラッシュ山括弧閉じでもいいしstyleでfont-weight: boldでもいい

2021-01-15

anond:20210115195322

やーい、お前んち、String

(この構文一度使ってみたかった)

2020-12-23

anond:20201223100242

createPassword = (n) => n==0 ? "" : String.fromCharCode(33+Math.floor(Math.random()*93)) + createPassword(n-1);
console.log( createPassword(8) );

2020-12-09

配列操作するメソッドの書き方の正解がわからない

例えば、引数配列を受け取って要素を足すメソッドとき

以下のパターンがある

どれが正解かわからない

引数配列をそのまま操作して戻り値を返さなパターン

private void addValueToArray(String[] array) {

 array.add("foo");

}

// 呼び出し

addValueToArray(array);

// この後そのままarrayを使う

String bar = array[0];

引数配列をそのまま操作して戻り値を返すパターン

private String[ ] addValueToArray(String[] array) {

 array.add("foo");

 return array;

}

// 呼び出し

String[] newArray = addValueToArray(array);

// この後はnewArrayを使う

String bar = newArray[0];

新しい配列を作って返すパターン

private String[ ] addValueToArray(String[] array) {

 String[] resultArray = array;

 resultArray.add("foo");

 return resultArray;

}

// 呼び出し

String[] newArray = addValueToArray(array);

// この後はnewArrayを使う

String bar = newArray[0];

2020-11-15

anond:20201115004233

名前付き引数という仕組みはこの問題をかなり筋良く解決しているように思う。

例えばSwift

func set(hoge: Int)

を呼び出す時は

obj.set(hoge: 42)

と書く。

メソッドオーバーロード名前単位可能なので、func set(fuga: Int)も定義できる。

Swiftアクセサメソッドなんて書くことはないというのはともかく。(例なので)

名前付き引数があるとかなり関数命名が変わり、hogeFromFuga(int fuga)やfooWithBar(string bar)が単にhoge(piyo: Int)やfoo(bar: String)になる。

2020-11-02

anond:20201030201448

最近ブチ切れたコードの一部

public virtual class DataInfo {
    public Integer p;
    public Integer c;
    public Integer r;
    public Integer v;
    public String name;
    public DateTime time;
    // ...
}

public class CellInfo extends DataInfo {
    public String stl;
    public Integer cntl;
    public String[] lines;
    // ...
}

public class FormInfo extends CellInfo {
    public Integer err;
    public String org;
    public String mod;
    public String type;
    public Integer size;
    public Integer step;
    // ....
}

2020-09-27

anond:20200927035510

言語によると思う

javaなら普通にオブジェクトEnum継承したインスタンスになるからその分メモリ使うし、enum内部で結局String持ってる(コンパイラStringEnumの子クラスコンストラクタに渡す)からStringの方がリソース無駄にならない

インスタンス単一にする意味はあるから結局enumの方が好ましいだろうけど)

Cとかは実質intだからStringにするのは無駄だろうな

anond:20200927003907

enumをただの単一インスタンス確約されたキーオジェクトしか使ってないの見ると悲しくなるよね

そんな用途しか使わないならstaticで宣言したStringでいいじゃねぇかってなる

ストラテジーパターン的にinterface貼って使うならenumも便利だなと思うけど

2020-09-01

仮面ライダークウガ最終回名言最初セリフだけエンジニア

「QAに聞いたんですけど、あのバグ、やっぱまだ直ってませんでした。だから、狙う時は“ここ”をお願いします」

五代……」

「いやもちろん、万が一、俺が“究極の闇をもたらす存在”になっちゃったらですけどね」

「……。こんな寄り道はさせたくなかった」

「え?」

「君には……冒険だけしていて欲しかった」

「……」

「ここまで君を付き合わせてしまって……」

ありがとうございました」

「……?」

「俺、よかったと思ってますだって一条さんと会えたから」

五代……」

「じゃあ、見てて下さい。俺の――変身」

>> java.lang.NoSuchMethodException: com.laurens.Main.main([Ljava.lang.String;)

    at java.lang.Class.getMethod(Class.java:1786)

    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:125)


台詞引用元

https://w.atwiki.jp/aniwotawiki/pages/9479.html

2020-08-21

アドレスエイリアス

エイリアスは nickname [longname] ・・・

nickname is ニックネーム. 一単語にしてね

ロングネームオプションです several wordsでもいいよ

メールアドレスはカッコでくるむ。以下省略 文字化けから

以下追加 to .muttrc:

set alias_file = "~/.mutt/aliases"

set sort_alias = alias

set reverse_alias = yes

source $alias_file

Explanation:
ニックネーム必須なのね。。。。

Now all you have to do when prompted To: is writing the alias instead of the full address. The beauty of it is that you can auto-complete the alias using Tab. Autocompleting a wrong or an empty string will display the full list. You can select the alias as usual, or by typing its index number.

There are two ways to create aliases:

From Mutt, press 「a」 when an e-mail of the target person を selected.

編集→ the alias_file 手作業で. The シンタックス is 本当に シンプル:

alias nickname Long Name <my-friend@domain.tld

会話のグループ

The default sort order is by date. Use the sort-mailbox command (default key: o) to change the sorting option. You can group e-mails by conversation/thread, in which case you can define how to sort threads and how to sort within a thread.

In the following example, threads are sorted according to the date of their last e-mail.

set sort=threads

set sort_aux=last-date-received

sort

Default: date

Specifies how to sort messages in the “index” menu. Valid values are:

date or date-sent

2020-07-12

1841年のアイドルオタク

https://en.m.wikipedia.org/wiki/Lisztomania

フランツ・リスト、すげえ人気でファンが超熱狂してたらしい。

Admirers of Liszt would swarm over him, fighting over his handkerchiefs and gloves.[3] Fans would wear his portrait on brooches and cameos.[2][4] Women would try to get locks of his hair, and whenever he broke a piano string, admirers would try to obtain it in order to make a bracelet.[4]

リストの信奉者は彼の周りを取り囲んで、ハンカチ手袋を巡って争った。ファンたちは彼の肖像画の入ったブローチやカメオを身につけていた。女性たちは彼の髪束を手に入れようとし、彼のピアノの弦が切れた時にはそれを入手してブレスレットにしようとした。

 

誇張されてるっぽいけど、「リストさんの捨てたタバコの吸い殻を拾ってアクセサリに加工してた人もいる」ってエピソードも書いてある。

厄介クソオタク19世紀からいる……

2020-06-05

anond:20200605175823

から

データ定義からそれが何なのか分からんのよ

呼び出しを見ないと

そもそも呼び出す場所によって使われ方違うし


あとそれとは逆にさ

データ定義の方に「特定の画面で使ったときに強調表示するかどうか」みたいな情報を入れたがるのよ

MVCとか遥か以前の問題

あと20プログラマやってる人が

public Map&lt;String, Object&gt; mOptions;

みたいなフィールド用意すれば、クラス変えなくても機能追加できる、とかほんとに言ってるの

おわってる

2020-05-23

anond:20200521175300

どもども。

「なにか作ってみろ」は有効アドバイス

わたし意見と経歴

わたしは「なにか作ってみろ」系の言説にはまったく同意しません。

わたし自身会社に3ヶ月間みっちり導入教育をしてもらい(COBOL85とPL/I時代がわかる……)、基本的アルゴリズムコントロールブレークマッチング、マスタ-トランザクションソートマージetc.いよいよ時代がわかる……)の演習を(給料をもらいながら)やって、その後もプログラムとつかず離れずでフラフラと生きてきました。

こういう経験新卒カードがあるから有効もので、では1から始めるとしたら……、というときに、プログラミングスクール専門学校)というのは悪くない選択肢ではないかと思います。が、行ったことないので正直わかりません。

実際自分が1から始めるという立場になったら、まったくオロオロして元増田さんのように世のなか(の気にいらないヤツら)に呪詛を吐いて満足するだけだったと思います(当然ながらそれをいくらやってもプログラミングは上達しません)。

「なにか作ってみる」前に動機をはっきりさせる

話をプログラミングだけに限っていえば、一番大事なのはやりかたじゃなくて動機だろうと思います

「なにか作ってみよう」というのは、なにか作ってみようと思ってない人にはまったく心に響かないでしょう。

動機リブンで「なにか作ってみた」人といえば思いだすのは、MikuMikuDance樋口優さん(ミクを簡単に踊らせたい!)とhinadanの若宮正子さん(高齢者にも遊べるゲームが欲しい!)でしょうか。

ただかれらはわたしから見れば(モチベーションを維持しそれを行動に移す)天才で、あんまり参考にならないのも確かです。

作ってみた」は就職に使える経験

あと、元増田さんの動機は「プログラミング生業にしたい」ということなので、野良プログラマでは履歴書上でのアピール力が弱いかも、と思います

ビジネスで使われるアルゴリズムにはそれなりのルールがあります安全な(バグの出にくい)コードの書きかた、「車輪の再発明」はぜず、枯れた(将棋で言えば定跡のような)アルゴリズムを使う、ほかの人に使ってもらえるための工夫(可読性の向上など)、etc.です。

「なにか作ってみよう」を繰りかえしても、そういった作法的なものが身につくかどうか、それは才能に関わってくる問題だと思います。才能だのみの手法を推奨するのは無責任だと思いますね。

また、たとえば「例をコピーして解析する」というのもある意味有効プログラミング学習法ですが、「下手に習うと下手が伝染る」ともいいます。どれがお手本として優れているか、それを見る目はある程度ビジネス用途プログラムに関わっていないと持てないというジレンマがあります

野生のプログラマ就職有効なくらいの力を見せるとしたら、なにかのコミッター(なにする人かよく知りませんが)とかになって「××ならこの人」となったり、プログラミングコンテストで上位の成績を残したりしなければいけないのかもしれません。

どうしたものでしょうね。ブクマカのみなさんの反応を見ると、専門学校でもあまり就職に有利にならない(ホントか?専門学校意味あるのか?)という話ですが、目的就職ならば、一番の近道のような気がします。

じゃあどうすべきか?は他人にはわからない

そこらへんからは、元増田さんがなにをしたいか、あるいは聞いてみたいだけだったのかによります仕事には適性とやる気が大事です。あとは年齢と必要性かな。進路はオーダーメイド以外にはありえないので、提示された案を自分で選んでそれに賭けるしかないのかな、と思います

「なにか作ってみました」の記録

自分がまず作ったもの晒してみろよ

さて、この文章は実はこの一文に反応してのものです。(↑のは前書き)

GWあたりからトシも考えずにRubyの再入門をしていまして、手始めに「首相動静」の整形ツールを作ってみました。

初心者で(Rubyに関しては仕事で使ったことないので)なにか作ってみよう、というとこの程度ですね。

これで就職に有利になるかというと、あんまりそうは思えないなあ。Excelマクロが組めるとかのほうがどこかの事務所に潜りこめそうですよ(でもそれも最近インフレ気味かもしれませんね)。

なにをするツール

朝日新聞首相動静は詳細ですが、改行が入っておらず、大変読みにくいものです。こんな感じです。

首相動静の例(2018年12月11日……話題になったものです)

 【午前】9時31分、自民党本部。33分、同党役員会。10時2分、官邸。5分、閣議。21分、宇宙開発戦略本部。34分、柴山昌彦文部科学相。38分、岩屋毅防衛相。41分、山下貴司法相。11時3分安全保障と防衛力に関する懇談会

 【午後】0時11分、政府与党連絡会議。44分、山口那津男公明党代表。1時27分、日韓議員連盟額賀福志郎会長河村建夫幹事長。2時20分、行政改革推進会議。52分、兼原信官房副長官補、秋葉剛男外務事務次官。3時36分、麻生太郎財務相財務省岡本薫明事務次官太田主計局長。4時7分、太田氏出る。可部生理局長加わる。15分、全員出る。25分、黒川弘務法務事務次官。34分、谷内正太郎国家安全保障局長、北村内閣情報官宮川内閣衛星情報センター所長。41分、谷内、宮川両氏出る。5時3分北村氏出る。10分、東京永田町ザ・キャピトルホテル東急宴会場「鳳凰」で中曽根康弘世界平和研究所設立30周年記念式典に出席し、あいさつ。20分、官邸。6時18分、ガーナのアクフォアド大統領を出迎え。記念撮影。19分、儀仗(ぎじょう)隊による栄誉礼、儀仗。27分、アクフォアド大統領会談。7時12分、署名式、共同記者発表。32分、公邸首相主催の夕食会。8時43分、アクフォアド大統領見送り。9時、ヨルダンのアブドラ国王電話協議

首相動静フォーマット

ただ、これはフォーマットがはっきりしており、

  • 午前と午後はそれぞれ1行になっていて、行頭には【午前】/【午後】という文字列が付いている。
  • 午前と午後の間には空行がある。
  • ひとつひとつイベント時刻表示で始まり句点「。」で終わっている。
  • 時刻は「h時m分」型で、前ゼロはつかない。後にかならず読点「、」が付く。「h時」の部分が前の項目と同じ場合には省略する。
  • 午前いっぱい、午後いっぱいの予定の場合には時刻をつけない(他の首相動静から)。

と、例を見るかぎりキッチリとしたルールに則っているようです。

動機

なので、「これだったら整形できるかも」と思い、再び学びはじめたRubyで整形ツールを作ってみることにしました。

整形ツール
ツール仕様
整形後の例(上記動静を整形)

【午前】

09時31分、自民党本部

09時33分、同党役員会。

10時02分、官邸

10時05分、閣議

10時21分、宇宙開発戦略本部

10時34分、柴山昌彦文部科学相

10時38分、岩屋毅防衛相

10時41分、山下貴司法相

11時03分安全保障と防衛力に関する懇談会

【午後】

00時11分、政府与党連絡会議

00時44分、山口那津男公明党代表

01時27分、日韓議員連盟額賀福志郎会長河村建夫幹事長

02時20分、行政改革推進会議

02時52分、兼原信官房副長官補、秋葉剛男外務事務次官

03時36分、麻生太郎財務相財務省岡本薫明事務次官太田主計局長。

04時07分、太田氏出る。可部生理局長加わる。

04時15分、全員出る。

04時25分、黒川弘務法務事務次官

04時34分、谷内正太郎国家安全保障局長、北村内閣情報官宮川内閣衛星情報センター所長。

04時41分、谷内、宮川両氏出る。

05時03分北村氏出る。

05時10分、東京永田町ザ・キャピトルホテル東急宴会場「鳳凰」で中曽根康弘世界平和研究所設立30周年記念式典に出席し、あいさつ。

05時20分、官邸

06時18分、ガーナのアクフォアド大統領を出迎え。記念撮影

06時19分、儀仗(ぎじょう)隊による栄誉礼、儀仗。

06時27分、アクフォアド大統領会談

07時12分、署名式、共同記者発表。

07時32分、公邸首相主催の夕食会。

08時43分、アクフォアド大統領見送り

09時00分、ヨルダンのアブドラ国王電話協議

う~ん、見やすい!ことないですか?

あと、午後の時刻を24時間制にしたいな、とも思いますが、それは今後の課題(つぎに首相動静話題になったとき)とします。全角数字計算ってどうやるんだろう?

ソース

たぶんRubyistにいろいろ突っこまれると思うけど、こんな感じです。

プログラマ玉石混淆ですが、これは石のほうの例だと思っていただければさいわいです。

はてな記法にはシンタックスハイライトあるけど、増田だとInternal Server Errorになるのではずしました。見にくくてスマソ。

# encoding: utf-8
# 漢字コンバータライブラリを取りこむ(String漢字変換メソッドを付けてくれる。神)
require 'kconv'

# 正規表現パターン
# 時刻をh時m分形式からhh時mm分形式にする
# 否定後読みを使用する
# 時は行頭にある
OneDigitHour = /^((?&lt;![0-1])[0-9]時)/
# 分は時のあとにある。このパターンマッチすると、&#92;1が時、&#92;2が分になる。
OneDigitMinute = /^([0-9]{1,2}時)(?&lt;![1-5])([0-9]分)/
# 分のない、時だけの行のパターン否定先読み使用
HourWithoutMinute = /^([0-9]{1,2}時)(?![0-5]?[0-9]分)/

# 行頭のh時m分をhh時mm分にするサブ処理(これは関数といっていいの?)
def convTopHourMinute2TwoDigits(oneLine)
    # 時を変換
    oneLine.sub!(OneDigitHour, "0&#92;&#92;1")
    # 分を変換
    oneLine.sub!(OneDigitMinute, "&#92;&#92;10&#92;&#92;2")
    # 分がない場合"00分"を追加
    oneLine.sub!(HourWithoutMinute, "&#92;&#92;100分")
    # 戻り値
    oneLine
end

# 入力ファイル名前
InputFilename = "首相動静2018年12月11日.txt"
# 出力ファイル名前
OutputFilename = "首相動静2018年12月11日_編集済.txt"

# 入力ファイルオープン
inFile = File.open(InputFilename, "r")
# 出力ファイルオープン
outFile = File.open(OutputFilename, "w")

# 時刻パターンシンプルに、h時、m分、h時m分、という3パターンを結合する
# 1つのパターンで全部カバーするよりこちらのほうが見やすい。というか、脳の容量の問題で1文に書ききれなかった
jikokuPattern = /[0-9]{1,2}時[0-9]{1,2}分、|[0-9]{1,2}時、|[0-9]{1,2}分、/
# 午前/午後
ampm = /(【午前】|【午後】)/

# 午前/午後、あるいは時刻の前で改行するためのパターン
kaigyouSign = Regexp.union(ampm, jikokuPattern)

# ファイル一括読み込み
# 昔は1行ずつ読みこんでました。メインメモリが3MByteとかだったので
contents = inFile.read.toutf8

# 入力終了。閉じておきます
inFile.close

# スコープ関係から、ここでローカル変数に代入
# ※ Rubyスコープと暗黙の型には泣かされました。これに慣れるのがRubyのコツかしら
#  明示的な型宣言はあったほうがいいと思うなあ。エラー出力の理由がわからなかったりするので。
hour = ""

# デバッグ行はコメント化しています
# 時刻パターンチェックのため、コンテンツを出力してみる
# p jikokuPattern.match(contents)

# エントリを改行サインで行に分ける
contents.gsub!(kaigyouSign, "&#92;n&#92;&#92;&amp;amp;") # "&#92;&#92;&amp;amp;"はマッチした文字列のもの。2重のエスケープ"&#92;&#92;"が必要

# 改行チェックのため出力
# p contents

# 入力を行で分割して各行ごとに処理
contents.split("&#92;n") do |oneLine|
    # 午前/午後を示す開きカッコ"【"があるか
    if (oneLine =~ /^【/) then
        # そのまま出力
        outFile.write(oneLine + "&#92;n")
        # p "午前午後:" + oneLine
        next
    # 空白行は無視スキップする)
    elsif (oneLine =~ /^[&#92;s ]*$/) then
        # 出力しない
        # p " 空白行:&lt;skip&gt;"
        next
    # 行頭に「時」があるか
    elsif (oneLine =~ /^[0-9]{1,2}時/) then
        # あったら時間表示を抜きだしておく
        hour = oneLine.match(/^([0-9]{1,2}時)/)[0]
        # p "   時:" + oneLine
        outFile.write(convTopHourMinute2TwoDigits(oneLine) + "&#92;n")
        next
    else
        # 「時」がなければつけて出力
        oneLine = hour + oneLine
        # p "普通の行:" + oneLine
        outFile.write(convTopHourMinute2TwoDigits(oneLine) + "&#92;n")
    end
end
感想

手でやったほうが早いね

以上

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