URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5761
[ Назад ]

Исходное сообщение
"Выборка из двух таблиц, не их базы"

Отправлено ajk , 30-Сен-06 20:33 
Есть два структурированных как таблицы файла, один достаточно большой.
Одно поле у них совпадает.
Как выбрать строки в которых эти поля совпадают?
Вообще, в большой таблице нужно поле "связки" заменить на имя "ключа" из маленькой таблица. А уж отобрать записи которые нужны не проблема

На sql это 5 строк, но в базу со своими таблицами я влезть не могу, потому нужно сделать на шелле. Очень не хочется это делать потом, типа, на Аксессе


Содержание

Сообщения в этом обсуждении
"Выборка из двух таблиц, не их базы"
Отправлено Асен Тотин , 30-Сен-06 21:19 
Привет,

Если Perl устраивает, можно сделать так:

1. Читаем маленький файл, делаем в памяти hash из значении "ключ" - "стоимость".
2. Перебираем весь большой файл строка за строкой, делаем split каждой страки по delimiter-у (табулятор, запятая или то, что там у вас) в массив, заменяем N-ный элемент масива стоимостью того элемента hash-а, у которого ключ - сам N-ный элемент массива.

Строк будет не 5, но врад ли более 10-и :-)

WWell,


"Выборка из двух таблиц, не их базы"
Отправлено ajk , 01-Окт-06 20:35 
>Привет,
>
>Если Perl устраивает, можно сделать так:
>
>1. Читаем маленький файл, делаем в памяти hash из значении "ключ" -
>"стоимость".
>2. Перебираем весь большой файл строка за строкой, делаем split каждой страки
>по delimiter-у (табулятор, запятая или то, что там у вас) в
>массив, заменяем N-ный элемент масива стоимостью того элемента hash-а, у которого
>ключ - сам N-ный элемент массива.
>
>Строк будет не 5, но врад ли более 10-и :-)
>
>WWell,
Дайте строчку про hash
Я не знаю перла, но немного видел, пойму.

Я бы это на php сделал, но его там нет. Все права обрезали, блин, уроды. И, ладно бы,  оправдано...


"Выборка из двух таблиц, не их базы"
Отправлено Асен Тотин , 01-Окт-06 22:36 
Привет,

"man perlfunc" везде, где непонятен синтаксис.

Что-то вроде:

---

#!/usr/bin/perl

open (SMALL_FILE, "small_file.txt") || die "Failed to open SMALL_FILE";
while (!eof(SMALL_FILE)) {
$line = <SMALL_FILE>;
chomp $line;
($key, $hash{$key}) = split(/\ /,$line);
}
close SMALL_FILE;

open (BIG_FILE, "big_file.txt") || die "Failed to open BIG_FILE";
while (!eof(BIG_FILE)) {
$line = <BIG_FILE>;
@line_parts = split(/\ /,$line);
$line_parts[1] = $hash{$line_parts[1];}
for ($i=0; $i<@line_parts; $i++) {print $line_parts[$i];}
print "\n";
}
close BIG_FILE;

---

WWell,


"Выборка из двух таблиц, не их базы"
Отправлено madskull , 16-Окт-06 15:45 
>Есть два структурированных как таблицы файла, один достаточно большой.
>Одно поле у них совпадает.
>Как выбрать строки в которых эти поля совпадают?
>Вообще, в большой таблице нужно поле "связки" заменить на имя "ключа" из
>маленькой таблица. А уж отобрать записи которые нужны не проблема
>
>На sql это 5 строк, но в базу со своими таблицами я
>влезть не могу, потому нужно сделать на шелле. Очень не хочется
>это делать потом, типа, на Аксессе

подозреваю, что man join поможет