Задачка в Batch
Имеем большой файл инпут.тхт в нем много столбцов, разделитель табулятор,
надо вычитать десятый столбец и сохранить его в отдельный файл оутпут.тхт
В Екселе ограничение на объёмы, а Аксесс это база, мне просто пару сточек в баше накидайте, типа такой для замены 1 и 2 столбца:
@echo off & setlocal
set "TXT=Test.txt"
set "CSV=Test.csv"
del "%CSV%" 2>nul
for /f "usebackq tokens=1,2* delims=;" %%i in ("%TXT%") do >>"%CSV%" echo %%j;%%i;%%k
there's no for /f
in DOS.
Остальное изучаешь тут:
https://superuser.com/questions/1267964/a-cmd-batch-for-f-...
от
Further Resources
и дальше по ссылкам.
Остальное изучаешь тут:
https://superuser.com/questions/1267964/a-cmd-batch-for-f-...
от
Further Resources
и дальше по ссылкам.
Зачем изучать, когда можно просто запихать в какую-нибудь прожку (хоть вышеупомянутый Эксель) и там подшаманить?
Стратегия Алекса "не хочу учиться" работает безотказно, экономит силы и время (ещё бы!) и приводит к лёгким решениям (ну тут как пойдёт). Алекс - твой друг и надёжный товарищь в этом неспокойном мире. Донатить туда-то.
ТС, есть сайт Суперюзер, как уже показывали - там спрашивайте. Тут полтора калеки, из которых один заблудившийся на островах робинзон семизнак - вероятность что-то найти минимальная. Или лучше сразу гуглить по excel. Разбейте задачу на последовательность действий. В вашем случае их будет где-то 2-3. Обычно такие файлы, как у вас, пишутся построчно. Значит, и читать их надо построчно - в каждой строке у вас уже будет
элемент нужных вам столбцов:
excel read text file string by string
Затем нужно распарсить строку, выделив столбцы через разделитель-табулятор:
excel split string by tab
Затем нужно распарсенное поместить в какой-то массив и вычесть один элемент из другого (как вы хотели). Ну это уже проще.
Я бы тупо заделал консольное приложение на Сишарпе, т.к. его лучше знаю. Там эта вся фигня делается через LINQ. По сути - тоже гуглить на каждый шаг решение на C#: как открыть файл, как читать по строкам, как парсить, как сохранять в массив и т.д.
По-моему, возня с Экселем более замороченная, чем на Шарпе в консольку вывести после игр с линком.
У меня файл на несколько гигабайтов и миллионы строк, эксель = "OpenOffice Calc" зависает не открывая файла,
хотелось иметь программку либо в батч либо в питоне, можно в С или С++ (но чтоб компилировалось на простой винде)
а так да, если программки не будет, придется рубить через консольную стоку на файлы по 50мб и делать всё ручками..
файл на несколько гигабайтов и миллионы строк
------
Если Ексел не справляетсят - пользуется Аксесс.
Писать там ничего не надо... и дистинкт с ордером тоже работают.
и делать всё ручками
------
Дело хозяйское.
Мне проще поднять в базу и выбрать из нее требуемое.
python:
import csv
with open('input.txt','r') as file_to_read:
with open('output.txt','w') as file_to_write:
for line in csv.reader(file_to_read, delimiter='\t'):
file_to_write.write(line[9])
file_to_write.write('\n')
P.S.:
табуляция не сохранилась: каждая строка, начиная с первого with сдвинута на 4 символа по отношению к предыдущей (кроме последней) , в соответсвии с питоновским синтаксисом, разумеется
вангую, что такое может PowerShell.
С заданиями как у меня, любой язык программирования справится, это простейшие сравнения текста, удаление дубликатов,
поэтому я и обрадовался, как любитель писать в текстовом файле, .тхт убрал и добавил .бат и готово.. но нет, оказывается:
batch это для виндовс,
bash это для линукса
powershell это тоже для виндовс,
и у всех свои заморочки, и ГЛАВНОЕ в batch нормально табулятор оформить не смогли, извращаются, у меня мозг вскипел)))
В общем, сделал всё с питоном (как Американец) , в анаконде, юпитерноутбук панда уже есть, сначала вычитал столбцы:
import pandas as pd
df = pd.read_csv("input.csv", sep='\t', usecols=['recipient'])df.to_csv("output.csv", index=False)
потом удалил дубликаты:
import pandas as pddf = pd.read_csv("output.csv", usecols=['recipient'])df = df.drop_duplicates()df.to_csv("babosiki.csv", index=False)
в итоге конечный список из 500 тысяч адресов весит 21МБ, теперь надо думать куда деньги потратить, вроде уже все есть)))
mport pandas as pd
df = pd.read_csv("input.csv", sep='\t', usecols=['recipient'])
df.to_csv("output.csv", index=False)
Если панда-таблица влезла в РАМ, значит, не такой уж большой файл у вас был...
Решение через итераторы должно сработать даже если не влазит.
Эксель и OpenOffice Calc у меня зависали, я согласен что построчно читать лучше, но сейчас пока хватает,
а если расширять поиск, то конечно и с базой данных работать придётся и инсталлировать кучу программ..