Итератор потока строк файла процесса

Привет у меня есть этот скрипт ниже, который передает все данные построчно от input.txt
как только это будет сделано, потоковые данные будут скопированы в буфер обмена.

Я хочу, чтобы поток одной строки процесса и скопировать эту строку, а затем поток&скопировать следующую строку … и так далее.

НАПРИМЕР:

открыть input.txt скопируйте первую поточную строку в буфер обмена, запустите макрос щелчка мыши, запустите макрос вставки

затем

скопировать вторую буферную строку в буфер обмена, запустить макрос щелчка мыши, запустить макрос вставки …

зациклить это input.txt

Я уже использовал /n в качестве разделителя в потоке итератора для разделения каждой строки

// copyfilelines.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"#include <windows.h>
#include <fstream>
#include <string>
#include <vector>
#include <direct.h>
#include <conio.h>
#include <stdio.h>
#include <cstdlib>
#include <winuser.h>
#include <cmath>
#include <iomanip>
#include <complex>
#include <iostream>
#include <sstream>
#include <iterator>

void toClipboard(HWND hwnd, const std::string &s);

/*
* It will iterate through all the lines in file and
* put them in given vector then copy vector to clipboard.
*/

//1. Open file and put each line into a vector.
bool getFileContent(std::string fileName, std::vector<std::string> & vecOfStrs)
{

// Open the File
std::ifstream in(fileName.c_str());

// Check if object is valid.
if (!in)
{
std::cerr << "Cannot open the File : " << fileName << std::endl;
return false;

}

std::string str;
// Read the next line from File untill it reaches the end.
while (std::getline(in, str))
{
// Line contains string of length > 0 then save it in vector.
if (str.size() > 0)
vecOfStrs.push_back(str);
}
// Close The File.
in.close();

return true;

}//2. Declare clipboard functions at file scope.
void toClipboard(HWND hwnd, const std::string &s) {
OpenClipboard(hwnd);
EmptyClipboard();
HGLOBAL hg = GlobalAlloc(GMEM_MOVEABLE, s.size() + 1);
if (!hg) {
CloseClipboard();
return;
}
memcpy(GlobalLock(hg), s.c_str(), s.size() + 1);
GlobalUnlock(hg);
SetClipboardData(CF_TEXT, hg);
CloseClipboard();
GlobalFree(hg);
}int main()
{
std::vector<std::string> vecOfStr;
// Get the contents of file in a vector.
bool result = getFileContent("input.txt", vecOfStr);
if (result)
{
std::stringstream ss;
// Populate
std::copy(vecOfStr.begin(), vecOfStr.end(), std::ostream_iterator<std::string>(ss, "\n"));
// Display
std::cout << ss.str() << std::endl;
// Copy vector to clipboard.
size_t len = strlen(ss.str().c_str());
// Get desktop windows and the call toClipboard.
HWND hwnd = GetDesktopWindow();
toClipboard(hwnd, ss.str());
Sleep(100000);
}

return 0;
}

0

Решение

Эта строка заставляет вашу программу работать со всеми строками файла (теперь хранятся как элементы в векторе) за один раз.

std::copy(vecOfStr.begin(), vecOfStr.end(), std::ostream_iterator<std::string>(ss, "\n"));

Чтобы заставить его работать построчно, просто итерируйте элементы вектора хранения индивидуально с for петля.

for (auto str : vecOfStr)
{
toClipboard(hwnd, str);
// run mouse click macro, run paste macro...
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]