- ベストアンサー
配列への文字入力について
- 配列に改行を含む文字列を入力する際の見やすいソースにする方法を教えてください。
- 配列への文字入力時に改行した文字を揃える方法を教えてください。
- bashで配列に改行を含む文字列を入力する際の見やすい記載方法について教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- ファイルから文字列を読み込むシェルスクリプトの作成
現在シェルスクリプトの勉強をしています。 ファイルから文字列を読み込み表示するだけのシェルスクリプトを 作成しているのですが、エラーが出てうまくいきません。 ./test.sh: line 10: syntax error near unexpected token `done' 以下の通りファイルを作っています。 改行コードはLF、文字コードはSJISとなっています。 どのあたりが間違っているのか教えて頂けますでしょうか。 よろしくお願いします。 test.sh --------------------- #!/bin/sh LIST=./abc.lst while read F1 echo ${F2} break done < ${LIST} } --------------------- abc.lst --------------------- AAA BBB CCC ---------------------
- 締切済み
- その他(プログラミング・開発)
- BShell 動的配列のループ処理について
動的に変数名を作成した配列について、ループ処理を行う場合、どうしたらいいでしょうか 以下のような処理を書いたのですが、駄目でした。 a=0 while [ ${a} -ne 10 ] do eval $(printf TEST%02d $a)=(aaa bbb ccc) #TEST00 - TEST10の配列が作られる。 # TEST00 - TEST10の配列の中身にたいして処理を行いたい。。。 for (( I=0; I < ${#`eval $(printf TEST%02d $a)[@]`}; ++I )) # エラー do // ここで処理したい・・・ done done いいアイディアがありましたらご教授よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- 配列のつなげ方
配列をつなげて文字列にしたいと思っています。 Dim abc() As String Dim i As String Dim namae As String i=0 ここでDBに接続してループでまわしながらデータを取得してきます。 Do while y > z abc(i) = X i = i+1 loop Xはループがまわる毎に違う値がセットされます。例えば1回目のループでリンゴ、2回目のループでミカンといった具合にです。 つまり、abc(0)=リンゴ、abc(1)=ミカン、abc(2)=メロン といった具合にです。 最終的には namae="リンゴ、ミカン、メロン、・・・・"といった具合にnamaeに代入したいと思っています。namae = abc(0) & "," & abc(1) & ","....と やれば実現できるのはわかります。 Xにはデータがいくつはいっているかわかりません。どうやった式をたてれば、実現できるでしょうか?
- ベストアンサー
- Visual Basic
- 配列
String型の配列の中の文字列の文字数を数える方法で困っています。 問題は、int型の変数lenで与えられた数字よりも大きい文字数の文字列はいくつあるか調べます。 例) stringsLongerThan({"a","ab","abc"}, 0) 3つ全ての文字列の文字数は0より大きいので3を返す stringsLongerThan({"a","ab","abc"}, 2) "abc"の文字数が2より大きいので1を返す stringsLongerThan({"a","ab","abc","abcd","abcde","abcdef","abcdefg"}, 3) "abcd","abcde","abcdef","abcdefg"の4つが文字数3より大きいので4を返す 途中まで組んだのですが、配列array[]の中の文字列の文字数を数えるにはどうしたらよいのでしょうか? public int stringsLongerthan(String[] array, int len){ int result=0; for(int i=0;i<array.length;i++){ //ここで配列array[i]の文字列の文字数を数える int count=文字数; if(cont>len) result++; } return result; } 宜しくお願いします。
- ベストアンサー
- Java
- 文字列を格納する配列を、動的なメモリ確保で処理したい
文字数が一定でない文字列の一覧を、配列に格納したいと思っています。 "AAA" "BBBBB" "CC" このような文字列を配列に格納するのに普通にやるなら char test[3][24]; for(i=0;i<3;i++){ strcpy(test[i],file[i]); } (便宜上、file[0]には、"AAA",file[1]には"BBBBB"が格納されてるとします) こうやると、test[3][24]の24バイトとか余計に確保した分が無駄になるので、 必要な文字列の長さだけ配列を確保したいと考えています。 で、 char *test[3]; for(i=0;i<3;i++){ //sizeには、各文字列のサイズが格納してあります。ここではその部分省略しますが test[i]= (char*)malloc(size); strcpy(test[i],file[i]); } とやれば (イメージで) test[0]= "AAA" test[1]= "BBBBB" test[2]= "CC" となると思ったのですが、うまく処理されませんでした。 このような処理をさせたい場合根本的に違うのでしょうか。 わかりにくい説明ですが、どなたかご存知の方よろしくお願いします
- ベストアンサー
- C・C++・C#
- 入力された文字列を一文字ずつ配列に格納する方法
例えばABCって文字列が入力されたら配列に data[0]="ABC" と格納するのではなく data[0]="A" data[1]="B" data[2]="C" と格納するにはどう書けばいいのでしょうか?
- 締切済み
- Java
- C言語:配列の中の文字を。。。
こんにちは。 閲覧していただきありがとうございます。 長文になりますが勉強がわからず困っているので、ご助力いただけると助かります。 C言語についてです。 文字列の中に、特定の文字が出てきたときにだけ改行して表示するプログラムを作りたくて、以下のようにしてみました。(文字はアルファベット小文字のみです) #include<stdio.h> #include<string.h> int main(){ char str[200]; int i; int k; puts("文字列を入力"); gets(str); k = strlen(str); for(i=0;i<k;i++){ if(strcmp(str[i],"n")==0) printf("\n"); printf("%c",str[i]); } return 0; } このプログラムにより期待する結果は、例えば入力した文字列が「abcdne abcn d」だとすれば、nが来たときに改行が実行されて abcd ne abc n d と表示されるようにしたいのですが、strcmpにintは渡せないとか、ポインタを使ってみても、実力不足ゆえに、「移植性のないポインタ変換」とかのエラーしか出ません。 どのようにすれば、この結果を得ることができるのでしょうか? ぜひご教授ください。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 複数行をヒットさせる正規表現
~ 省略 ~ ==abc== ! ああ !: あいうえお ! いい !: いうえおあ ==def== ~ 省略 ~ とあった時、==abc==から==def==の間を全て取得したいのですが、 どうにも改行文字の所で止まってしまい、==abc==までしか 取得する事が出来ません。 ~ 省略 ~部分は全く同じ形式で文字列が大量にありますが、 ==abc==、==def==は1箇所にしか存在しません。 どういう正規表現をすれば上記全ての文字列を取得する事が出来るのでしょうか?
- ベストアンサー
- PHP
- ディレクトリをコピーするツールを作ってますけど、うまくいきません。
ディレクトリをコピーするツールを作ってますけど、うまくいきません。 何方か教えてください! 内容:1、「~/???.tmp」というディレクトリを検索し指定ディレクトリにコピーする。 2、「~/???」というディレクトリも合わせて指定ディレクトリにコピーする。 3、 指定ディレクトリから2階層下にある「aaa」ディレクトリ直下を対象とする。 4、 コピーしたディレクトリを表示する。 使い方:./cptmpDir.sh path1 path2 [-c] 引数: path1 は対象ディレクトリ path2 はコピー先ディレクトリ -c 指定されていればディレクトリのコピーを行う。 例え以下のようなディレクトリがあるとする。 home/ccc/bbb/aaa/abc.tmp home/ccc/bbb/aaa/abc home/ccc/bbb/aaa/cba home/ccc/bbb/aaa/ddd/efg.tmp home/ccc/bbb/aaa/ddd.tmp ./cptmpDir.sh /home /var/tmp [-c] を実行したら home/ccc/bbb/aaa/abc.tmp home/ccc/bbb/aaa/abc home/ccc/bbb/aaa/ddd.tmp が/var/tmpにコピーされるのが正常の働き。 私が書いたシェルは 内容1、3、4、はできたけれども 2、ができてません。 だからhome/ccc/bbb/aaa/abcがコピー対象がになっています。 以下は私が書いたシェルである。 #!/bin/ksh if [[ $# -lt 2]] then echo "usage: $0 path [-c]" exit 1 fi path2=$2 copydir=0 if [[ $3 = "-c" ]] then copydir=1 fi find $1 -maxdepth 3 -mindepth 3 -type d -name "aaa" | ¥ while read d do find $d -maxdepth 1 -mindepth 1 -type d -name "*.tmp" | ¥ while read a do if [[ $copydir -eq 1 ]] then cp -r $a $path2 echo "cp" "${a#*/}" else echo "${a#*/}" fi done done よろしくお願い致します!。 home/ccc/bbb/aaa/abcもコピーされるように!!!
- ベストアンサー
- その他(プログラミング・開発)
- /dev/stdinはそれ以降の入力をかき消す???
意味不明なタイトルですみません。 今回は/dev/stdinについて教えてください。 /dev中のファイルは特殊ファイルなので深追いしない方がいいとは思うのですが詳しい方お願いします。 次のコマンドとその出力を見てください。 $ echo "a > a > a > a > a" | while read LINE > do > grep -l str $LINE > done a a a a a $ これはgrepにファイルaを5回検索させる命令ですが この5行のaの途中に/dev/stdinを挿入すると次のように/dev/stdin以降が出力されなくなってしまうのです!! $ echo "a > /dev/stdin > a > a > a > a" | while read LINE > do > grep -l str $LINE > done a $ この/dev/stdinとはいったい何者なのですか!? このコマンドでは、いったいどのような事態が起こっているのですか!?
- ベストアンサー
- Linux系OS
お礼
ありがとうございます! さっそく活用させて頂きます。