biketrials.ru

biketrials.ru (http://biketrials.ru/live/index.php)
-   Забор (http://biketrials.ru/live/forumdisplay.php?f=13)
-   -   Кто шарит в экселе помогите (http://biketrials.ru/live/showthread.php?t=27316)

@Gudron 10.12.2009 14:08

Кто шарит в экселе помогите
 
Имеем 2 столбца с данными:
первый вида
Второй
другими словами первый содержит только фамилии, а второй те же фамилии и ещё имена
Задача:
Заменить данные из первого столбца дополненными данными из второго.

Фамилии в первом столбце находятся в определенном порядке, в котором они и должны оставаться после дополнения их данными из второго столбца.
пример:
а1: Пупкин в1: Антон Пальчиков
а2: Воробей в2: Андрей Воробей
а3: Пальчиков в3: Вася Пупкин

Нужно получить инфрмацию в столбце "а" вида

а1: Вася Пупкин
а2: Андрей Воробей
а3: Антон Пальчиков

Cooper 10.12.2009 14:17

не шарю. но ник приятно видеть правильный!

rastayak 10.12.2009 15:02

Попробую сейчас сделать...
А нужно пользоваться только функциями Экселя, без vba?
UPD: В принципе сейчас функциями сделаю.

Конкретно для 3-х значений сделал - если больше - то надо делать цикл, а это уже в макросах...

Kефир 10.12.2009 15:27

Я сделал уже. Не парься.

Код:

using System.Collections.Generic;
using System.IO;
using System.Text;


namespace ConsoleApplication6
{
  internal class Program
  {
      private static void Main(string[] args)
      {
        string[] lines = File.ReadAllLines("c:\\temp\\gudron.csv", Encoding.GetEncoding(1251));
        var col1 = new List();
        var col2 = new List();
        var result = new List();

        foreach (string line in lines)
        {
            string[] ss = line.Split(';');
            col1.Add(ss[1]);
            col2.Add(ss[3]);
        }

        foreach (string s in col1)
        {
            if (string.IsNullOrEmpty(s))
              continue;

            string match = col2.Find(x => x.Contains(s));
            result.Add(string.IsNullOrEmpty(match) ? s : match);
        }

        File.WriteAllLines("c:\\temp\\gudron_result.csv", result.ToArray(), Encoding.GetEncoding(1251));
      }

  }
}}


Feo 10.12.2009 15:30

ммм,С++?))

rastayak 10.12.2009 15:32

Нифига себе...
Ну да ладно, а если надо сделать только средствами MS Excel?

Kефир 10.12.2009 15:37

Сказали - можно чем угодно :) Как мне проще так и сделал. Важен результат.
C# это а не С++

Но я готов обсудить ради интереса, как это сделать без макросов. Пока что простого решения не вижу.

rastayak 10.12.2009 15:42

Без макросов ИМХО никак.
Я делал так - разбил строку ИМЯ_ФАМИЛИЯ на две, потом условиями прогонял каждую строку на совпадения, если фамилия совпадала - слеплял ячейки вместе. Если больше значений - размер условия очень вырастет, так что только макросы (если пользовать только офисные средства).

Kефир 10.12.2009 15:50

Щас посмотрел, есть функция vlookup например. Ищет значение в колонке. Думаю её можно заюзать..

@Gudron 10.12.2009 16:33

Огромное спасибо Кефир

andzhi4 10.12.2009 20:49

Цитата:

string.IsNullOrEmpty
Фигасе на С# методы :shock: Или это для всех .NET SDK работает?
Может там еще есть string.IsNameOfKnownArtist ?:)
На самом деле, удобно.

Апд: пардон за глупые вопросы. Просто я до сих пор фигачу на Delphi под Win32, ибо свято верю, что на .NET можно писать только медиаплееры и браузеры, а серьезное ПО для моделирования технологических процессов требует реализации вычислительных методов непосредственно программистом - не хочу, чтоб у меня памятью управлял непонятный гарбаж-коллектор :)

Kефир 10.12.2009 21:09

Анжич-анжич..
Серьёзное ПО требует стабильности. Гарбаж-коллектор для того и сделан, чтобы ты думал о техпроцессах, а не о том, где бы мемори-лик не случился.

Дебаггер, опять же, намного круче чем в unmanaged языках. А это очень важно для серьёзных приложений.

Медиаплееры и браузеры как раз на .NET врядли. А вот бизнес-приложения ("серьёзное по") - на всю катушку. Тут есть всё для разработки гагантских приложений со сложной архитектурой. Я этим собственно и занимаюсь уже довольно давно.

Цитата:

Может там еще есть string.IsNameOfKnownArtist
Это легко реализовать при помощи extension methods :)
Там много чего есть удобного. Обрати внимание на col2.Find(x => x.Contains(s)). Ну это так, цветочки. Дельфи даже рядом не валялся. А WPF видел? Linq2Sql?

Короче, очень советую попробовать .NET или Java, у них там очень похожие крутые штуки.

andzhi4 11.12.2009 00:28

Круто!
col2.Find(x => x.Contains(s)) - реально интересно, на дельфе такое в 3-4 строки укладывается, хотя, может embarcadero в версии 2010 чего-нибудь нового подкинули :)
С WPF конечно работал, но для фана, а с Link2SQL побаловаться пока не удалось.
Delphi, в принципе, тоже поддерживает .NET с шестой версии, так что все прелести этой библиотеки доступны.
У меня сейчас стоит задача оптимизации приложения, которое моделирует процесс разделения газожидкостной смеси в жалюзийном сепараторе.Если короче, то основной модуль представляет собой 4 или иногда 5 вложенных циклов, в каждом от 1000 до 10000 операций, причем со сложными математическими преобразованиями. Наш эксперт сказал, что если переведу это дело на .NET - начну терять ценные миллисекунды на каждом шаге, а в результате это выльется в приличное замедление работы, с тех пор я как-то .NET стороной обхожу :)

Kефир 11.12.2009 01:31

Ну никто и не спорит, что такие алгоритмы, где каждые такт дорог, надо реализовывать на низком уровне. Хотя опять же как посмотреть.. где-то .net и не хуже может оказаться. Всё зависит от прокладкой между сиденьем и клавиатурой.

Например, сейчас уже зачастую быстрее будет работать какой-нибудь алгоритм на C++, чем на ассемблере. Оптимизирующие компиляторы творят чудеса.

Цитата:

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

Эх, можно долго всё это обсуждать )
Технологии вообще летят вперёд, только одно осваиваешь - уже новое выходит.. только поспевай. Мы уже пишем под .NET 4 Beta2

andzhi4 11.12.2009 02:38

Нормально, не отстаете от времени.
Я вообще то не кодер, а it-специалист широкого профиля. Вследствие большой ширины, особой глубины нигде не достигается :), поэтому всегда есть что-то, чего не знаю или не успел узнать/попробовать. Хотя, может оно и к лучшему :)

Gazza 11.12.2009 22:51

о_0

-=MIXMAKER7=- 12.12.2009 02:07

Как же ты, Митяй, прав!


Часовой пояс GMT +4, время: 07:14.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot