Форум программистов, компьютерный форум CyberForum.ru

стоит связываться или это не задачка для начинающих? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
lohness
 Аватар для lohness
124 / 96 / 4
Регистрация: 24.04.2008
Сообщений: 885
22.11.2013, 16:10     стоит связываться или это не задачка для начинающих? #1
Объясню предысторию.
Многие хранят свои картинки на яндексе, затем делают пост вставляя в него уменьшенные копии, причем не всегда есть ссылка на сам альбом где можно взять оригиналы.
Для сохранения оригиналов из альбомов приходится сначала скачивать файл с ссылками, затем править в нем ссылки с копии на оригиналы (благо это несложно), запускать измененный файл, потом сохранять с картинками.
НО яндекс меняет имена файлов на случайные значения поэтому для упорядоченного списка (например страниц книжки) приходится сейчас редактировать файл убирая все не относящееся к именам а затем делать батник который уже переименует имеющиеся файлы.

Даже если есть прямая ссылка на альбом, то там можно скачать его целиком через какой-нибудь менеджер закачек целиком, но, опять же, названия будут кучей символов.


Вот такая понимашь загогулина

Давно хочется автоматизировать хотя бы последнюю часть html -> bat , которая отнимает львиную часть времени.

В идеале, конечно, хотелось бы просто скармливать программе ссылку, а на выходе получать файло-картинки с номерами по порядку в соответствующей папке.

Опыт программирования очень небольшой С на 286 (лет 20 назад в институте) поэтому думаю, что полностью задачу не потяну (вообще не в курсе как заставить общаться прогу с инетом).

А вот работу со строками наверное смогу попробовать.

Как я понимаю надо

1. убрать из файла все строки где нет слова orig.jpg

останутся строки такого вида:
rel="nofollow"><IMG width="800" height="534" title="" alt="" src="папка1_files/0_cfbf2_39396e7_orig.jpg"

2. укоротить строчки до прямых ссылок на картинки

0_cfbf2_39396e7_orig.jpg

4. далее добавить в каждой строчке с

3. далее добавить в каждой строчке слева REN справа xx.jpg

ren 0_cfbf2_39396e7_orig.jpg 01.jpg
ren 0_cfbf3_931d3197_orig.jpg 02.jpg
ren 0_cfbf4_22ba9201_orig.jpg 03.jpg
ren 0_cfbf5_12b53a87_orig.jpg 04.jpg


4. далее сохранить это в bat-файл, который и переименует мои файлы

Куда смотреть в первую очередь

P.S. Может я придумываю велосипед и все уже придумано до нас?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2013, 16:10     стоит связываться или это не задачка для начинающих?
Посмотрите здесь:

Что такое __attribute__((packed)),и когда это стоит использовать? C++
Факториал! Для кого-то это легко, а кто-то вообще это не знает! C++
Странная реализация класса - многоточие: стоит ли понимать это буквально? C++
C++ Низкоуровневость в c++. Стоит или не стоит его учить?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
23.11.2013, 05:08     стоит связываться или это не задачка для начинающих?
  #21

Не по теме:

Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
А давайте сыграем в гольф?
Такой хоккей нам не нужен...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lohness
 Аватар для lohness
124 / 96 / 4
Регистрация: 24.04.2008
Сообщений: 885
23.11.2013, 08:51  [ТС]     стоит связываться или это не задачка для начинающих? #22
Цитата Сообщение от Cra3y Посмотреть сообщение

Не по теме:

Эм... А зачем создавать батник, если средствами стандартных библиотек можно сразу переименовать?

Так я в начале и спрашивал про это тоже.
Оптимально ввести только ссылку а прога сама уже будет вытаскивать оригиналы и переименовывая их складывать в нужную папку
Но так как в программировании не силен то ограничился задачей, которую, как мне кажется, смогу понять-осилить.
тем более что на яндексе есть нюансы - не всегда имеются файлы xxxxx_orig.jpg иногда максимальное разрешение xxx_XXXL.jpg
т.е. еще надо вводить доп проверки на наличие оригиналов.ну и добавлять GUI для красоты и удобства

так что прога станет довольно навороченной и явно не для новичков кмк


Начну пока с понимания более-менее простой конструкции
0x10
23.11.2013, 09:34
  #23

Не по теме:

Цитата Сообщение от lohness Посмотреть сообщение
так что прога станет довольно навороченной и явно не для новичков
Да нет тут ничего сверхъестественного. сделать запрос на указанный урл, стянуть html, распарсить, получить урлы изображений, сохранить под новыми именами. Просто писать такое лучше с использованием более высокоуровневых инструментов.

lohness
 Аватар для lohness
124 / 96 / 4
Регистрация: 24.04.2008
Сообщений: 885
25.11.2013, 13:15  [ТС]     стоит связываться или это не задачка для начинающих? #24
Пытаюсь вместо

ifstream fin("input.html");

сделать ручной ввод имени файла:


char filename[25];
cout << "\n Введите имя файла (input.html): ";
cin >> filename;
cout <<
"Посмотрите на Ваши данные : ";
cout << filename;
cout <<
"\n";




ifstream fin(filename);
if (!fin) cout << "Ошибка исходного файла!" << endl;
.......

в результате все время ошибка исходного файла

что делаю не так?
newbie666
Заблокирован
25.11.2013, 13:24     стоит связываться или это не задачка для начинающих? #25
C++
1
2
3
4
5
6
7
8
9
10
11
std::string filename;
std::cout << "\n Введите имя файла (input.html): ";
std::cin >> filename;
std::cout << "Посмотрите на Ваши данные : "; 
std::cout << filename << std::endl;
std::fstream fs(filename.c_str(), std::ios::in);
if(fs.is_open())
{
    //делаем что надо
    fs.close();
}
Добавлено через 19 секунд
так надо
lohness
 Аватар для lohness
124 / 96 / 4
Регистрация: 24.04.2008
Сообщений: 885
25.11.2013, 13:33  [ТС]     стоит связываться или это не задачка для начинающих? #26
заработало когда вошел в папку с готовым экзешником, а не работает из компилятора

ну и char сменил на string
newbie666
Заблокирован
25.11.2013, 13:34     стоит связываться или это не задачка для начинающих? #27
Цитата Сообщение от lohness Посмотреть сообщение
заработало когда вошел в папку с готовым экзешником, а не работает из компилятора
что значит из компилятора?
lohness
 Аватар для lohness
124 / 96 / 4
Регистрация: 24.04.2008
Сообщений: 885
25.11.2013, 13:51  [ТС]     стоит связываться или это не задачка для начинающих? #28
в студии по F5

полазил по настройкам назначив рабочий каталог туда где лежит готовый экзешник теперь и из студии заработало

Добавлено через 1 минуту
пол дня потратил на то чтобы понять почему правильный код не работал
newbie666
Заблокирован
25.11.2013, 13:58     стоит связываться или это не задачка для начинающих? #29
Цитата Сообщение от lohness Посмотреть сообщение
пол дня потратил на то чтобы понять почему правильный код не работал
можно вводить полный путь к файлу
lohness
 Аватар для lohness
124 / 96 / 4
Регистрация: 24.04.2008
Сообщений: 885
25.11.2013, 14:36  [ТС]     стоит связываться или это не задачка для начинающих? #30
в самой программе или когда запрашивается программой?
newbie666
Заблокирован
25.11.2013, 14:39     стоит связываться или это не задачка для начинающих? #31
Цитата Сообщение от lohness Посмотреть сообщение
или когда запрашивается программой?
да когда угодно, можно и когда программа запрашивает, можно в программе, а можно и параметром в командной строке
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
25.11.2013, 14:41     стоит связываться или это не задачка для начинающих? #32
Цитата Сообщение от lohness Посмотреть сообщение
в самой программе или когда запрашивается программой?
Такие параметры обычно передаются как аргументы командной строки. Опционально в самой программе можно сделать значения по умолчанию. Чтобы не возиться с ручной обработкой списка аргументов, можно взять boost program_options.
lohness
 Аватар для lohness
124 / 96 / 4
Регистрация: 24.04.2008
Сообщений: 885
25.11.2013, 14:44  [ТС]     стоит связываться или это не задачка для начинающих? #33
а есть несложное решение первый десяток нумеровать с нулем спереди, т.е. чтобы было не 1.jpg, а 01.jpg

Добавлено через 2 минуты
Цитата Сообщение от newbie666 Посмотреть сообщение
да когда угодно, можно и когда программа запрашивает, можно в программе, а можно и параметром в командной строке

Сейчас программа ищет в том каталоге где и сама лежит.
В принципе меня это устраивает

Была проблема с отладкой так как там путь другой был.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
25.11.2013, 14:45     стоит связываться или это не задачка для начинающих? #34
Цитата Сообщение от lohness Посмотреть сообщение
а есть несложное решение первый десяток нумеровать с нулем спереди, т.е. чтобы было не 1.jpg, а 01.jpg
http://en.cppreference.com/w/cpp/io/manip/setfill
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2013, 15:45     стоит связываться или это не задачка для начинающих? #35
Цитата Сообщение от lohness Посмотреть сообщение
полазил по настройкам назначив рабочий каталог туда где лежит готовый экзешник теперь и из студии заработало
По умолчанию, файл ищется студией в папке проекта. Разве ошибку не выдавало, когда не ручной ввод имени файла был?

Добавлено через 48 секунд
Цитата Сообщение от lohness Посмотреть сообщение
а есть несложное решение первый десяток нумеровать с нулем спереди, т.е. чтобы было не 1.jpg, а 01.jpg
Если не секрет, для чего такое нужно?
lohness
 Аватар для lohness
124 / 96 / 4
Регистрация: 24.04.2008
Сообщений: 885
25.11.2013, 15:50  [ТС]     стоит связываться или это не задачка для начинающих? #36
Цитата Сообщение от alsav22 Посмотреть сообщение
По умолчанию, файл ищется студией в папке проекта. Разве ошибку не выдавало, когда не ручной ввод имени файла был?

Добавлено через 48 секунд

Если не секрет, для чего такое нужно?
некрасиво когда идет так:
1
2
3
4
5
6
7
8
9
10
11
.....

опять же у некоторых вьюверов просмотр косеет при такой нумерации т.е. после первого покажет десятый
newbie666
Заблокирован
25.11.2013, 15:56     стоит связываться или это не задачка для начинающих? #37
ну ты в строку загоняй данные - в std::string, далее проверяй, если size() стринга == 1. тогда insert(0, "0");
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
25.11.2013, 16:06     стоит связываться или это не задачка для начинающих? #38
Цитата Сообщение от newbie666 Посмотреть сообщение
ну ты в строку загоняй данные - в std::string, далее проверяй, если size() стринга == 1. тогда insert(0, "0");
Эм... Как бы я выше привел ссылку на прямое решение.
newbie666
25.11.2013, 16:09
  #39

Не по теме:

Цитата Сообщение от 0x10 Посмотреть сообщение
Эм... Как бы я выше привел ссылку на прямое решение.
ok - не заметил, эта тема просто уже на пустом месте раздулась неимоверно - даже читать то что сверху уже лень

lohness
 Аватар для lohness
124 / 96 / 4
Регистрация: 24.04.2008
Сообщений: 885
25.11.2013, 17:33  [ТС]     стоит связываться или это не задачка для начинающих? #40
Цитата Сообщение от newbie666 Посмотреть сообщение

Не по теме:


ok - не заметил, эта тема просто уже на пустом месте раздулась неимоверно - даже читать то что сверху уже лень


ОК - на новые вопросы буду заводить новые темы

Добавлено через 1 час 21 минуту
напоследок в этой же теме спрошу

string::size_type n = str.find(".jpg");

if (n != string::npos)
{
str.erase(str.begin(), str.begin() + str.find(
'/') + 2);
str.replace(str.find(
"XXXL"), 4, "orig");
str.erase(str.begin() + str.find(
'\"'), str.end());

Пытаюсь добавить замену символов в строке (показано красным)
Код компилится без ошибок, но при запуске программы как только доходит до этого места программа валится
Yandex
Объявления
25.11.2013, 17:33     стоит связываться или это не задачка для начинающих?
Ответ Создать тему
Опции темы

Текущее время: 01:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru