Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Java] CSV файлы в файлы с полями фикс. ширины 
V
    Опции темы
kornata
Дата 7.4.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Помогите мне выполнить задание. Трудности с переводом.


Создайте программу, которая переводит CSV файлы в файлы с полями фиксированной ширины. Аргументы программы: имя входного файла, имя выходного файла, список длин полей. Во входном файле поля разделены запятыми, каждая строка - отдельная запись. В выходном файле должны появиться те же самые записи, по одной в строку, но без разделителя полей, поля должны быть заданной ширины, значения дополнены пробелами до длины поля, строковые значения выравнениы по левому краю, численные - по правому. 


Это сообщение отредактировал(а) kornata - 7.4.2010, 12:32
PM MAIL   Вверх
kornata
Дата 18.4.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Кто мне может помочь?
PM MAIL   Вверх
LSD
Дата 20.4.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Сторонние библиотеки можно использовать?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
kornata
Дата 20.4.2010, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Это какие?
PM MAIL   Вверх
kornata
Дата 20.4.2010, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Вот я кое-что сделала: 

Код

import java.io.*;
import java.util.*;
  public class csv extends ArrayList<String> {
  // Read a file as a single string and formatize this string for a new File:
  public static String read(String fileName, String... args) {
    StringBuilder sb = new StringBuilder();
    try {
      BufferedReader in= new BufferedReader(new FileReader(
        new File(fileName).getAbsoluteFile()));
    try {
        String s;
        while((s = in.readLine()) != null) {
        String formatise = ""; // @formatise - param for String.format method
        int i =1;
        ArrayList<String> sArr = new ArrayList<String>();
        /* split a String */
        StringTokenizer st = new StringTokenizer(s,",");
            while (st.hasMoreTokens()) {
                sArr.add(st.nextToken());
                /* generate @formatise*/
                try {
                    formatise = formatise +"%"+ Integer.toString(i) + "$" +"-" + (args[i-1])+"s"+ " ";
                } catch(ArrayIndexOutOfBoundsException e) {
                   System.out.println("It is not enough parameters");
                   throw new RuntimeException(e);
                }
                 i++;
            }
            /* Create String with new formatization */
            String s2 = String.format(formatise, sArr.toArray() );
            sb.append(s2);
            sb.append("\n");
        }
      } finally {
        in.close();
      }
    } catch(IOException e) {
      throw new RuntimeException(e);
    }
    return sb.toString();
  }
  // Write a New file
  public static void write(String fileName, String text) {
    try {
      PrintWriter out = new PrintWriter(
        new File(fileName).getAbsoluteFile());
      try {
        out.print(text);
      } finally {
        out.close();
      }
    } catch(IOException e) {
      throw new RuntimeException(e);
    }
  }
    public static void main(String args[]) {
    /*Separate fields width from args[]*/
    String[] args1 = new String[args.length-2];
    for (int i = 2; i<args.length; i++) {
        args1[i-2] = args[i];
        }
    String file = read(args[0] ,args1);
    System.out.println(file);
   
  }
}



Вот тут ругается на catch. 

Код

 public static void write(String fileName, String text) {
    try {
      PrintWriter out = new PrintWriter(
        new File(fileName).getAbsoluteFile());
      try {
        out.print(text);
      } finally {
        out.close();
      }
    } catch(IOException e) {
      throw new RuntimeException(e);
    }
  }

PM MAIL   Вверх
kornata
Дата 20.4.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Вот что пишет Нетбинс:

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  catch.gif 11,93 Kb
PM MAIL   Вверх
LSD
Дата 21.4.2010, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(kornata @  20.4.2010,  19:38 Найти цитируемый пост)
Это какие?

OpenCSV
Код

import au.com.bytecode.opencsv.CSVReader;

import java.io.*;

public class CSVProcessor
{
  public static void main(String[] args)
  {
    process(new File("C:\\TEMP\\Sample.csv"), new File("C:\\TEMP\\Sample.txt"), 50);
  }

  public static void process(File inFile, File outFile, int width)
  {
    CSVReader csvReader = null;
    PrintWriter writer = null;
    try
    {
      writer = new PrintWriter(outFile);
      csvReader = new CSVReader(new FileReader(inFile), ',', '"');
      String[] line;
      while((line = csvReader.readNext()) != null)
      {
        for(String col : line)
        {
          writer.write(pad(col, width));
        }
        writer.println();
      }
    }
    catch(IOException e)
    {
      e.printStackTrace();
    }
    finally
    {
      close(csvReader);
      close(writer);
    }
  }

  private static String pad(String col, int width)
  {
    col = col.trim();
    if(isNumber(col))
    {
      return padRight(col, width);
    }
    else
    {
      return padLeft(col, width);
    }
  }

  private static String padRight(String col, int width)
  {
    if(col.length() > width)
    {
      return ' ' + col.substring(0, width) + ' ';
    }
    else
    {
      StringBuilder buffer = new StringBuilder(width + 2);
      buffer.append(' ');
      int i = width - col.length();
      while(i > 0)
      {
        buffer.append(' ');
        i--;
      }
      buffer.append(col);
      buffer.append(' ');
      return buffer.toString();
    }
  }

  private static String padLeft(String col, int width)
  {
    if(col.length() > width)
    {
      return ' ' + col.substring(0, width) + ' ';
    }
    else
    {
      StringBuilder buffer = new StringBuilder(width + 2);
      buffer.append(' ');
      buffer.append(col);
      int i = width - col.length();
      while(i > 0)
      {
        buffer.append(' ');
        i--;
      }
      buffer.append(' ');
      return buffer.toString();
    }
  }

  private static boolean isNumber(String col)
  {
    try
    {
      Double.parseDouble(col);
      return true;
    }
    catch(NumberFormatException e)
    {
      return false;
    }
  }

  private static void close(Closeable closeable)
  {
    try
    {
      if(closeable != null)
      {
        closeable.close();
      }
    }
    catch(IOException e)
    {
      e.printStackTrace();
    }
  }
}




--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
kornata
Дата 21.4.2010, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Мне кажется нельзя, а почему у меня ошибка в catch? Как её исправить?
PM MAIL   Вверх
kornata
Дата 21.4.2010, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



LSD,  у меня ваш код не работает. Текстовый файл пустой и в Нетбинсе:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code
        at javaita.CSV.process(csv.java:21)
        at javaita.CSV.main(csv.java:13)
Java Result: 1
PM MAIL   Вверх
LSD
Дата 21.4.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(kornata @  21.4.2010,  14:05 Найти цитируемый пост)
Мне кажется нельзя, а почему у меня ошибка в catch? Как её исправить?

Нет там никаких ошибок, это у тебя NetBeans глючит. IOException там действительно нет, но есть FileNotFoundException который унаследован от IOException.



Цитата(kornata @  21.4.2010,  14:41 Найти цитируемый пост)
LSD,  у меня ваш код не работает. Текстовый файл пустой и в Нетбинсе:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code
        at javaita.CSV.process(csv.java:21)
        at javaita.CSV.main(csv.java:13)
Java Result: 1

Это какая-то внутренняя ошибка NetBeans. У меня все работает.


Попробуй компилировать код в командной строке или в другой IDE.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
kornata
Дата 25.4.2010, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0682 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.