投稿
ヨッシー okkun2002
文字列圧縮がバグだらけと気づいているものの解決方法が見つからない。 データ量を出来る限り増やさず文字を英数字に変える方法はないのだろうか
2そうだね
プレイ済み
返信[1]
親投稿
ヨッシー okkun2002
無表情で投稿してしまった
0そうだね
プレイ済み
返信[2]
親投稿
基本は同種をまとめるで、それが出来たらさらなる法則性をみつけ(使って)まとめる感じだと思いますよ〜。
1そうだね
プレイ済み
返信[3]
親投稿
ヨッシー okkun2002
初めにも言いましたがデータ量を出来る限り増やさず文字を英数字に変える方法はないのでしょうか
0そうだね
プレイ済み
返信[4]
親投稿
圧縮はデータの性質にもよるので確実な方法というのはなかったりしますし、とくに少量では逆にデータが増えることも多いですよ。なのでとくに少量でも効率良く圧縮したい場合、圧縮するデータの性質を見極めて、それに特化した圧縮をしないといけなくなります。 なので具体的なデータがわからないと適切な答えは出しにくいですし、そうでない場合はネットで圧縮関係を調べて自分に合った形の圧縮方法を見つけるって感じになるんじゃないですかねぇ…。
1そうだね
プレイ済み
返信[5]
親投稿
ヨッシー okkun2002
分かりました。ランレングス圧縮をとりあえずやってみようと試みたところ、良くある説明は「AAA」を「A3」にする。ですがそれだと元の文字に「A5」などが含まれていた場合圧縮をかけると「AAAAA」になってしまいます。正式にはいろいろあるようです。どうしたらその世にならないのでしょうか。質問ばっかですみません
0そうだね
プレイ済み
返信[6]
親投稿
ヨッシー okkun2002
あっ「その世に」ではなく「そのように」でした。
0そうだね
プレイ済み
返信[7]
親投稿
ヨッシー okkun2002
あっキーボードから入力できない文字を挟んでみようかな・・・
0そうだね
プレイ済み
返信[8]
親投稿
例えばですが、そういう場合は一定のルールを設定しないとうまくいかないです。簡単な一例をあげると、繰り返し回数は最大9回までとする。必ず文字の次に繰り返し回数がくる、とすれば、A5の場合は、A151となります。てかこの場合は逆に長くなってしまっています。これが必ず短くなるとは限らないというか逆に増えてしまうということです。ただ、 AAAABB2333DDCCCCCCCAAABBBBBB だったら、 A4B22133D2C7A3B6 となるので短くなりますよね? そういう感じです。ちなみに繰り返し回数を最大9回に限定したのは、そうしないと数字が続いたときに回数なのか文字なのかわからなくなるからです。 とまあこれは一例で、実際はもっと良い方法があったりデータに合わせて考える必要があるんですが参考までに書いてみました。
0そうだね
プレイ済み
返信[9]
親投稿
ちなみに繰り返し回数の数字として0と1は意味が無いので、その分を加算して繰り返し回数は最大11までとするとして、圧縮時に回数-2で保存して展開時に回数+2するようにすると連続が多いときはちょっとだけ短くなる可能性があります。(あくまでちょっとだけ…)
0そうだね
プレイ済み
返信[10]
親投稿
ヨッシー okkun2002
圧縮のとこだけこうしてみたのですがうまくいかないときがあります。どうしてでしょうか。公開キー【 NDEEB3ND 】
0そうだね
プレイ済み
返信[11]
親投稿
とりあえず意図があってるかはわからないですが間違えっぽいのが2箇所あります。 ひとつは5行目で、M=0だと始めの数がカウントされないので、M=1の必要があります。 もうひとつは22行目でM-1だと削るのが足りないのでMの必要があります。つまりS$=MID$(S$,M,LEN(S$)-1)ですね。
0そうだね
プレイ済み
返信[12]
親投稿
ヨッシー okkun2002
有難うございます!!。ホントだ。これならできました!ええっと解答も作らなきゃ
0そうだね
プレイ済み
返信[13]
親投稿
ヨッシー okkun2002
ん?あれ?「HHHHHHHHHHHHHHHHHG」を圧縮したら「H×9H×0」になった!
0そうだね
プレイ済み
返信[14]
親投稿
15行目のLNE(S$)-1の-1をとれば正常に動作しますね。 ただちょっと全体的にロジックが変に複雑化してしまってるところがあるんで、もうちょっと上手く書けばスッキリと正しい動作に出来るとは思うんですが。 まあでもとりあえず今は動くことが先決なんだと思いますし、とりあえずはそんな感じですね。
0そうだね
プレイ済み
返信[15]
親投稿
ヨッシー okkun2002
沢山の文字にソ以後に1文字違う文字をするとどうしても最後の文字かなくなってしまいます。どうしてかな・・・
0そうだね
プレイ済み
返信[16]
親投稿
上記のコメント、間違えてましたね。15行目のLEN(S$)-1の間違えです。つまり15行目は、最終的に、S$=MID$(S$,M,LEN(S$)) になりますね。てかさらに上で22行目って書いてあるのも行数間違えだし…。自分で修正したソースの行数になってしまっていたようです…。 ということで、15行目を変えれば最後の文字も消えないと思うんですが消えちゃいますかね?
0そうだね
プレイ済み
返信[17]
親投稿
ヨッシー okkun2002
こんな感じ?。でもだめだ
0そうだね
プレイ済み
返信[18]
親投稿
5行目もM=1にしないとダメですよ。
0そうだね
プレイ済み
返信[19]
親投稿
ヨッシー okkun2002
「BAAAAAAAA」を圧縮すると「」になってしまった。
0そうだね
プレイ済み
返信[20]
親投稿
ヨッシー okkun2002
あっそしたら「BAAAAAAAA」でもしっかりできました! でも、「AAAAあAAAAAAAAAAAAAAAAAAB」を圧縮するとやっぱり「A×9A×6」です
0そうだね
プレイ済み
返信[21]
親投稿
なんか対処療法になってる気がしますが、4行目の最後をLEN(S$)+1にしてみてください。
0そうだね
プレイ済み
返信[22]
親投稿
ヨッシー okkun2002
おお、なるほど・・・たしかにそれでできました。コメント数22件ほどまた質問したらすみません
0そうだね
プレイ済み
返信[23]
親投稿
やっぱりまだうまくいってないようです…。対処療法じゃ厳しいのかも…。 とりあえず公開キー上げて他のやり方を書いたので参考にしてみてください。 JKKEE2HE
0そうだね
プレイ済み
返信[24]
親投稿
公開キーダウンロードしたら言ってください。公開キー出せる数の余裕がないのですぐ消す予定です。(返事が無くても翌日には消すかな…) よろしくです。
0そうだね
プレイ済み
返信[25]
親投稿
ヨッシー okkun2002
公開キーダウンロードしました。おおっすごいホワイルの式ふくざつだ… これを使用して解凍をできるようにしてみました。本当に初心者に付き合ってもらいありがとうございました
0そうだね
プレイ済み
返信[26]
親投稿
了解です〜。それじゃ削除しますね。 WHILEは一見複雑に見えますが、実は始めのやつよりもシンプルでわかりやすいんですよ。流れも単純に数を数えてるだけだし。 それじゃ引き続き頑張ってください〜。
0そうだね
プレイ済み
返信[27]
親投稿
ヨッシー okkun2002
でんぺんさんのおかげで圧縮、解凍ができました。 何度も丁寧に教えていただきありがとうございました。 まだまだ初心者ですがこうやって質問しながら覚えていこうと思います。
0そうだね
プレイ済み