• 締切済み

[Fortran]文字列の並べ替え方法

Fortranで以下のような文字列を使いやすい形に並べ替える方法を教えてください。 (元) x1_y1 x2_y2 x3_y3 ... (変更後) x1_y1_x2_y2_x3_y3 x4_y4_x5_y5_x6_y6 x7_y7_x8_y8_x9_y9 ...

みんなの回答

  • f272
  • ベストアンサー率46% (8021/17144)
回答No.1

「以下のような文字列」というのがよくわからん。文字列の仕様をはっきりさせてほしい。 基本的には,元データを読んで,文字列として保存して,その文字列を成型して,変更後のデータを出力する,ということを繰り返せばよい。

関連するQ&A

  • 2つの文字列を比較する方法

    二つの文字列を比較して違う箇所を発見したとき 何らかの処理を行うようなプログラムを書きたいのですが、 私の想像力が貧困な為そのアルゴリズムを考え付く事ができません どなたか知恵を貸していただけないでしょうか? 具体的には以下のようなことをやっています。 私は現在,変数で var exStr1="||||||||||+|1|2|3|4|5|6|7|8|9|+||||||||||"; var exStr2="||2||||||||+|1||3|4|5|6|7|8|9|+||||||||||"; と宣言しているとき私は exStr1とexStr2では文字列の何処が違うか知る処理を知りたいのです。 とりあえず今私は変数X1とX2に X1 = exStr1.split("+"); X2 = exStr2.split("+"); として「+」を区切り文字にして配列に入れてみて 更にソレを「|」で区切りなおしてみてます。 for(i=0;i<10;i++){   Y1 = X1[i].split("|");   Y2 = X2[i].split("|"); } そこで違う場所を探すための処理として私は以下のように書いて見ました。 しかし現在全然動いてくれません。 for(i=0;i<10;i++){   if(X1[i] != X2[i]){     for(j=0;j<4;j++){       if(Y2[j] != Y1[j] && Y2[i]==""){         //ここで何らかの処理をしたい。しかし今はif文の条件がおかしいのか、この行の処理に入らない。       }     }   } } う~。なんか質問の域を越えてるとも思いますし、 それに我ながら質問の意味がわかりづらいとは思うのですが お願いします。なんらかのヒントのようなものでも頂けたら幸いです。

  • BLOCK構造体とFORTRAN

    fortranでプログラムを組むことになったのですが、これまでプログラムを組んだことがなかったので困っています。 gridgenで作成した.grdファイルをfortranで読み込ませることがうまくできません。 原因は、.grdのフォーマットがBLOCK構造体であるからだと考えています。 POINT構造体なら読み込めることが分かっているのですが…。 そこで質問です。 BLOCK構造体である「.grd」ファイルを読み込み、POINT構造体の「.dat」ファイルを出力するプログラムをfortranで組むにはどうしたらいいですか? BLOCK構造体とは以下の形式。 X1 X2 X3 X4 X5 …Xn Y1 Y2 Y3 Y4 Y5 … Yn Z1 Z2 Z3 Z4 Z5 … Zn POINT構造体は以下。 X1 Y1 Z1 X2 Y2 Z2 X3 Y3 Z3 X4 Y4 Z4 X5 Y5 Z5 … … … Xn Yn Zn

  • C#で文字列の置換えをするには?

    お世話になります。 C#で文字列の置換えに悩んでいます。 このAの文字列の各項目に値を入れていきたいのですが方法がわかりません。 具体的には、  A = "x__y__z__" があり、それぞれのx、y、zに値を入れます。例えば、  X = "12"  Y = "34"  Z = " 1" があり、結果的には  A = "x12y34z 1" なるようにしたいのです。最初は  A = "x" + X + "y" + Y + "z" + Z を考えていたのですが、そうではなくて左から2カラム目と3カラム目の間にXを・・・というような感じにしたいのです。 そこで皆様の知恵を拝借したいと思っています。 どういうコマンド(関数?)を使えば良いのでしょうか?

  • FORTRANのプログラミングについて

    たびたび申し訳ありません。 またFORTRANに関しての質問です。 x y z 0 0 30 1 0 45 2 0 60 3 0 43 4 0 51 5 0 32 0 1 43 1 1 90 2 1 32 3 1 85 4 1 65 5 1 90 0 2 32 1 2 32 と続くファイルがあります。これをFORTRANをで書き換えて、 0 0 30 0 1 43 0 2 32 1 0 45 1 1 90 1 2 32 と続くデータにしたいのです。(これを以下目的のファイルという) 今のところ、次のようなプログラムを書き、特定のXに対しては、結果を吐き出すことに成功しています。 program dat real x1(100),h,y2(100),y1(100),z1(100) integer i,n,j,k,l,m,a(100) open(7,file='test.txt') open(9,file='af-test.dat') do i=1,100 read(7,*,end=200) x1(i),y1(i),z1(i) if(x1(i).eq.90)then write(9,*) x1(i),y1(i),z1(i) end if end do 200 close(7) close(9) end ここまではうまくいくのですが、これでは90以外の場合は出力されません。(あたりまえですが) 特定のXに限らずに例えばXを0から100まで吐き出されるような目的のファイル作るにはをどのようにしてプログラムを書けばいいかご教授ください。

  • FORTRAN90

    fortran90で、ファイル出力をフォーマット付きで行いたいのですが、 write(unit,****) のような文で、****の部分のフォーマット指定を マニュアルで入力するのではなく、その場に応じた形で 指定する方法はありますでしょうか? character変数の文字にフォーマット指定の文字列、例えば六つの実数を横一列に書き出す場合を想定して write(char,"(A,I1,A)")"'(",Int,"D13.5)'" とし、 write(unit,char)x,y,z,w,s,t などとするのはできませんでした。 ここでいうintの部分を自動的に変えれるようにしたいのですが 何か策はありますでしょうか? わかりにくい説明ですみませんが宜しくおねがいします。

  • Fortran でのマイナス乗数の書き方

    Fortranで、マイナスの乗数の書き方についてお尋ねします。 cosθのマイナス1乗をプログラムで表したいのですが、どのように書けばいいでしょうか。 実際に行いたい計算は、経緯度の2点間の距離で、下記のように記述してみましたが 行最後の**-1でエラーがでています。 Fortran記述式 2点間距離 = r*(cos(sin(y1)*sin(y2)+cos(y1)*cos(y2)*cos(x1-x2)))**-1) 計算したい式 2点間距離 = rcos^-1(siny1siny2+cosy1cosy2cos(x1-x2)) Fortran v4.1.2(g95 0.93)を使用しています。 初歩的なこととは存じますが、よろしくお願いいたします。

  • ゼロを含む文字列の連結方法

    初歩的な質問かもしれませんが、お願いします。 ゼロが連続する文字列を連結させて、ひとつの文字列にしたいのですが、strcpyとstrcatの組み合わせでは、00があった時点でこの部分が抜けてしまいます。ゼロを含む完全な形で連結する方法をお願いします。 例: 文字列A:「0001」と文字列B:「0055」と文字列C:「00AA」を連結して、 文字列X:「0001005500AA」を作りたいのです。

  • 文字列の入れ替え

    2つのchar型配列x[],y[]に格納された文字列を入れ替えるプログラムを作成せよ。ただし入替え処理には、関数swap_array(char [],char [])を作成して用いること。という問題なのですが、下記の実行例では、2つの文字列xとyをキーボードから入力し、入れ替えた後に表示している。 <実行例> % ./irekae 文字列x (20字まで)? Mojiretsu 文字列y (20字まで)? Irekae 関数swap_array()を呼び出しました 入替後の x: "Irekae" 入替後の y: "Mojiretsu" % となっているのですが文字列を格納するところまでしかわかりません。 どなたか教えていただけないでしょうか? #include<stdio.h> int main(void) { char x[21]; char y[21]; printf("文字列 (20字まで)? "); scanf("%s", x); printf("文字列 (20字まで)? "); scanf("%s", y);

  • 秀丸の置換で/*コメント文字列*/"を削除したい。

    秀丸の置換の方法を教えて頂きたく質問させて頂きます。 次の文字列がテキストファイルの一行分です。 {{'\x0e', 9, 16},{0x00,0x00, /* ................ */0x03,0x00, /* ......%%........ */0x1D,0x00, /* ...%%%.%........ */0x11,0x00, /* ...%...%........ */0x13,0x00, /* ...%..%%........ */0x1D,0x00, /* ...%%%.%........ */0x11,0x00, /* ...%...%........ */0x11,0x00, /* ...%...%........ */0x11,0x00, /* ...%...%........ */0x13,0x00, /* ...%..%%........ */0x17,0x00, /* ...%.%%%........ */0x36,0x00, /* ..%%.%%......... */0x70,0x00, /* .%%%............ */0x60,0x00, /* .%%............. */0x00,0x00, /* ................ */0x00,0x00 /* ................ */}}, この文の中の/*から*/のコメントの文字列を削除して {{'\x0e', 9, 16},{0x00,0x00,0x03,0x00,0x1D,0x00,0x11,0x00,0x13,0x00,0x1D,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x13,0x00, 0x17,0x00,0x36,0x00,0x70,0x00,0x60,0x00,0x00,0x00,0x00,0x00}}, このような文字列にしたいのですが、どのようにすればよいか、どうぞご教授のほどよろしくお願い致します。

  • C言語 プログラミング 文字列

    ある文字列X,Yがあるとき、XにYの文字列が含まれているかを検索する関数を作りたいんです。 Xを1文字ずつ、yと比較して行く感じなのはわかるんですが、うまく作ることができません。。 どなたかお願いします!