2010-08-16 1 views
0

У меня есть ряд SQL скриптов, которые выглядят следующим образом:Очистка CREATE TABLE расположение колонок

CREATE TABLE table_one 
(
    column_one   int not null, 
    column_two varchar(100)    not null, 
    column_three_four_five int, 
    column_six decimal(16,4) null, 
    PRIMARY KEY (column_one, column_three_four_five) 
); 

Я хотел бы, чтобы очистить расположение, чтобы легче сканировать, что-то вроде этого:

CREATE TABLE table_one 
(
    column_one    int   not null, 
    column_two    varchar(100) not null, 
    column_three_four_five int, 
    column_six    decimal(16,4)  null, 
    PRIMARY KEY 
    (
     column_one, 
     column_three_four_five 
    ) 
); 

Точная компоновка менее важна, чем возможность создания чистого внешнего вида для улучшения удобочитаемости. (читайте: пожалуйста, не пламените само форматирование) -grin-

Что было бы хорошим способом сценария (я смотрю на вас, боги Perl ...)?

+1

Вы знаете, фразы типа «Perl gods» (с небольшим * g * не менее), «гуру», «хакеры» начинают терять свою оригинальность (!) Через некоторое время. –

+0

только один вопрос - это табуляции и пробел или только один из 2? – Prix

+0

@Prix: пробелы, чтобы это было просто. Я не ищу причудливый, просто чистый :) –

ответ

2

Hmmmmm ну не могу сказать, что это будет работать для всех ваших файлов, но что-то, как это будет делать эту работу ...

#!/usr/bin/perl 
use strict; 
use warnings; 

my $default_padding = 30; 
my $my_file = 'data.sql'; 
my $my_new_file = 'data_new.sql'; 

open (my $fh, '<', $my_file) or die $!; 
my @sql = <$fh>; 
close($fh); 

open (my $fhsave, '>>', $my_new_file) or die $!; 
foreach my $line (@sql) { 
    print $fhsave "$line" if ($line !~ /^\s+/); 
    $line =~ s/\s+/ /ig; 
    print $fhsave sprintf(" %-*s %s\n", $default_padding, $1, $2) if ($line =~ /^\s+(.+?)\s+(.+)/); 
} 
close ($fhsave); 

образец файла data.sql

CREATE TABLE table_one 
(
    column_one   int not null, 
    column_two varchar(100)    not null, 
    column_three_four_five int, 
    column_six decimal(16,4) null 
); 

выход:

CREATE TABLE table_one 
(
    column_one      int not null, 
    column_two      varchar(100) not null, 
    column_three_four_five   int, 
    column_six      decimal(16,4) null 
); 
+0

Спасибо, Prix! Вот и все. Просто, чисто, только то, что мне нужно. –

0

http://www.dpriver.com/pp/sqlformat.htm

Не сценарий. Но я не хочу ничего кодировать прямо сейчас.

Для таких вещей, как это на любом языке, найдите formatters или слово «pretty» для готового мусора.

+0

отличный сайт. Было бы неплохо, но я унаследовал около 300 из этих сценариев в разных состояниях отвратительного. И все же спасибо за ссылку. –

1

Я не пробовал ни одного, но CPAN имеет SQL::Beautify и SQL::QueryBuilder::Pretty.

+0

Это хорошо, но второй не знает, что такое CREATE TABLE, и испортит его, и первый из них очень хорошо форматирует, но имеет некоторые проблемы с новыми строками и скобками. Они, похоже, более подходят для выбора, удаления, обновления запросов. – Prix