HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1126
可憐重複チェックで躓いております2解決


可憐

リンク

2014/11/26(Wed) 16:03:09|NO.66194

重複チェックで躓いております
当方がやりたい事として
あるテキストを読み込みそのテキストから一部分だけを取り除き
そこから重複チェックをして重複行の最後の文字列に-1という文字を追加したいです
以下自分が作ったソースになります。

↓これをhsp-test2.datで保存


重複チェック A∬あいうえお∬重複1∬テキスト A∬あいうえお∬2133321∬テキスト B∬さしすせそ∬512644∬テキスト A∬さしすせそ∬重複3∬テキスト B∬かきくけこ∬54354354∬テキスト B∬さしすせそ∬754632∬テキスト B∬なにぬねの∬634455∬テキスト A∬さしすせそ∬重複2∬テキスト A∬あいうえお∬重複1∬テキスト A∬あいうえお∬143245∬テキスト A∬さしすせそ∬重複3∬テキスト A∬あいうえお∬重複1∬テキスト A∬さしすせそ∬重複2∬テキスト

以下がソースになります。




#include "hspda.as" #include "mod_regexp.as" sdim fn,256 : fn = "hsp-test2.dat" ;// 元ファイル名 notesel buf ;// 元ファイルバッファ noteload fn ;// 読み取りファイル名 Lines = noteinfo(0);// Lines = 行数 matches s,buf,"∬(.*?)∬(.*?)∬ repeat stat s=s+"\n"+s(cnt,2) loop notesel s notedel 0 exist fn sdim buf2,strsize ;// 排他バッファ xnotesel buf2,Lines dim linenumbuf,Lines sdim linebuf,32768 ;// 1行最大 32KBytes readOffset = 0 nextLineNummber = 0 repeat Lines,1 ;//最初の行を 1行目として実行 await 0 ;// 1行とりだす getstr linebuf,buf,readOffset : readOffset+=strsize ;// パーセンテージ表示 percent = cnt *100 / Lines if percent!ppercent : title "処理中... "+percent+"%完了 , 項目数: "+ nextLineNummber + " 重複行数:"+overlaps : ppercent = percent xnoteadd linebuf : idx = stat ;// 排他メモリノートパッドに追加 ;// その行が新しく追加されたものなら、その項目が初めて現れた行を記憶して continue if idx = nextLineNummber : linenumbuf.nextLineNummber = cnt : nextLineNummber++ : continue fline = linenumbuf.idx ;// 行が重複した場合の処理をこれ以下に書く ;// cnt = 元ファイルの cnt 行目は ;// idx = 項目番号 idx であり(0 から振られます) ;// fline = 元ファイルの fline 行目 と重複している ←その項目が最初に現れた行番号 mes "重複行:"+cnt+"行目 → 項目番号"+idx+"、元ファイル "+fline+"行目と重複" overlaps++ ;dialog cnt noteget juhuku,cnt notedel cnt noteadd juhuku+"-1",cnt,1 loop notesave "重複チェック.txt" ;// 完了。 title "完了 , 項目数: "+ nextLineNummber + " 重複行数:"+overlaps mes "処理が終わりました。\n 項目数: "+ nextLineNummber+" 重複行は"+overlaps+"行ありました。" stop

上が自分で作ったものなんですが
これが限界でして、実行してみたらおかしなことになります。
誰か改善できる方知恵を分けてください。。
これよりもっと短いソースでいけるのでしたら教えていただきたいです
よろしくお願いします

出した結果を下のようにしたいです。

重複1 2133321 512644 重複3 54354354 754632 634455 重複2 重複1-1 143245 重複3-1 重複1-1 重複2-1



この記事に返信する


Him

リンク

2014/11/26(Wed) 21:14:28|NO.66200

こんな感じ?

a = {"A∬あいうえお∬重複1∬テキスト A∬あいうえお∬2133321∬テキスト B∬さしすせそ∬512644∬テキスト A∬さしすせそ∬重複3∬テキスト B∬かきくけこ∬54354354∬テキスト B∬さしすせそ∬754632∬テキスト B∬なにぬねの∬634455∬テキスト A∬さしすせそ∬重複2∬テキスト A∬あいうえお∬重複1∬テキスト A∬あいうえお∬143245∬テキスト A∬さしすせそ∬重複3∬テキスト A∬あいうえお∬重複1∬テキスト A∬さしすせそ∬重複2∬テキスト"} split a, "\n", result_a sdim buf repeat length(result_a) check = "%s\n" n = cnt repeat n if (n != cnt)&&(result_a(n) == result_a(cnt)) { check = "%s-1\n" : break } loop split result_a(n), "∬", result_b buf + strf(check, result_b(2)) loop dialog buf



可憐

リンク

2014/11/27(Thu) 00:07:08|NO.66202

ありがとうございます!
解決しました!



ONION software Copyright 1997-2023(c) All rights reserved.