tototan -3ページ目

Javaでソート PracticalExercises5

自作iPhoneアプリ一覧 

今回はJavaで既存のファイルを読み込んでソートをして現在の日時の名前で書き出します。
既存のファイルは(ひらがなの名前)、(携帯電話番号)、(e-mailアドレス)の3つの項目があり、[,]で区切ったcsvファイルとします。

2通りのサンプルを作ってみました。
1つ目はカンマを無視して1行を1つのデータとしてソートした場合。
2つ目はカンマで分割し1行を3つのデータとして1つ目の(ひらがなの名前)を基準にしてソートした場合。

既存のファイル:sampledata.csv

例:やまもと あきら,010-0001-0001,akira@yamamoto.com

1つ目

import java.io.*;
import java.util.*;
import java.text.*;

public class PracticalExercises5B {

     public static void main(String[] args) {
   
      // 現在時刻取得
   SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd '_' HHmmss");
     // 読み込むファイルの名前
     String filename = "sampledata.csv";
   // 書き込むファイルの名前
   String newname = sdf.format(new Date()) + ".csv"; 
 
     try {
      BufferedReader reader = new BufferedReader(new FileReader(filename));
      PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(newname)));
    
      // ArrayListのインスタンスの確保
      ArrayList<String> csvData = new ArrayList<String>(); 
  
      System.out.println();
      System.out.println("************************************************************************");
      System.out.println("ソート前のデータ");
      System.out.println("************************************************************************");
       System.out.println();
  
      // ソート前のデータの表示とArrayListへデータを格納
        String line;
         while ( (line = reader.readLine()) != null ) {
           System.out.println(line);
             csvData.add(line);
         }
   
       // 名前でソート
       Collections.sort(csvData);
  
       System.out.println();
       System.out.println("************************************************************************");
       System.out.println("ソート後のデータ");
       System.out.println("************************************************************************");
       System.out.println();
  
       // ソート後のデータの表示とファイル出力
         for (String data : csvData) {  // イテレータ
          System.out.println(data);
          writer.println(data);
         }

         reader.close();
         writer.close();
   
        } catch(Exception e) {
           e.printStackTrace();
        }

    }

}

サンプルデータ

2つ目

import java.io.*;
import java.util.*;
import java.text.*;

  public class PracticalExercises5 {

   public static void main(String[] args) {
   
   // 現在時刻取得
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd '_' HHmmss");

     // 読み込むファイルの名前
     String filename = "sampledata.csv";
   // 書き込むファイルの名前
   String newname = sdf.format(new Date()) + ".csv"; 
 
     try {
    BufferedReader reader = new BufferedReader(new FileReader(filename));
    PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(newname)));
  
       String line;
   
    // ArrayListのインスタンスの確保
    ArrayList<String[]> csvData = new ArrayList<String[]>(); 
  
    //列の分割
       while ( ( line = reader.readLine()) != null ) {
          String[] cols = line.split(",");
           csvData.add(cols);
       }
     
      // 要素がSampleData型のArrayList型のインスタンスを変数listを作りデータをセット
     ArrayList<SampleData> list = new ArrayList<SampleData>();
   
    for ( String[] col : csvData ) { // イテレータ
        SampleData td;
        td = new SampleData();
        td.setName(col[0]);
        td.setSel(col[1]);
      td.setEmail(col[2]);
        list.add(td);
    }
  
    System.out.println();
    System.out.println("************************************************************************");
    System.out.println("ソート前のデータ");
    System.out.println("************************************************************************");
    System.out.println();
  
    // ソート前のデータの表示
      for (SampleData data : list) {  // イテレータ
          System.out.println(data);
      }
    // 名前でソート
    Collections.sort(list, new Comparator<SampleData>(){
        public int compare(SampleData t1, SampleData t2) {
          return t1.getName().compareTo(t2.getName());
        }
      });
  
    System.out.println();
    System.out.println("************************************************************************");
    System.out.println("ソート後のデータ");
    System.out.println("************************************************************************");
    System.out.println();
  
    // ソート後のデータの表示とファイル出力
      for (SampleData data : list) {  // イテレータ
       System.out.println(data);
     writer.println(data);
      }

    reader.close();
    writer.close();
   
     } catch(Exception e) {
         e.printStackTrace();
     }

  }}

public class SampleData {

  private String name;
    private String sel;
    private String email;

    public String getName() {
       return name;
    }
    public String getSel() {
       return sel;
    }
     public String getEmail() {
       return email;
    }

    public void setName(String name) {
       this.name = name;
    }
     public void setSel(String sel) {
       this.sel = sel;
     }
     public void setEmail(String email) {
        this.email = email;
     }
 
    @Override
     public String toString(){
         return "" + name + "," + "" + sel + "," + email; 
     }
}

サンプルデータ1 
サンプルデータ2

storyboardでデータの受け渡し

自作iPhoneアプリ一覧

このチュートリアルではstoryboadを使って親のビューコントロールでテキストフィールドに入力した文字列を子のビューコントロラーラベルへ表示します。






コード編集の詳細

【ViewController.h】

#import

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *textField;

@end


【ViewController.m】
#import "ViewController.h"
#import "SecondViewController.h"

@implementation ViewController
@synthesize textField;

#pragma mark - View lifecycle

- (void)viewDidLoad
{
   [super viewDidLoad];

   textField.delegate = self;
// Do any additional setup after loading the view, typically from a nib.
}


//Returnキーをタップした時、キーボードを隠すデリゲートメソッド
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
   [self.textField resignFirstResponder];
  return YES;
}



//Switch Viewボタンをタップした時の処理
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  if ([[segue identifier] isEqualToString:@"showText"]) {
  //showTextはStoryboardのsequeのIdentifier名

  SecondViewController *svc =[segue destinationViewController];
  //destinationViewControllerとはsequeの右側にあるViewControllerらしい
  svc.labelData = self.textField.text;
  }
}



【SecondViewController.h】

#import

@interface SecondViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *label;
@property (strong, nonatomic) NSString *labelData; //データを格納する変数

- (IBAction)goFirstView:(id)sender;

@end


【SecondViewController.m】

#import "SecondViewController.h"

@implementation SecondViewController

@synthesize labelData;
@synthesize label;


- (void)viewDidLoad
{
   [super viewDidLoad];
  label.text = labelData;
}

サンプルコードダウンロード

GameSaladのアプリを実行


自作iPhoneアプリ一覧 


今回はGameSaladをiPhoneのシュミレーターや実機で実行する方法です。ごく簡単です。

事前にhttp://gamesalad.com/からDownload iOS Viewerをクリックしてダウンロードします。