приведенный ниже код копирует текстовый файл в вектор, а затем передает все строки текстового файла в буфер обмена.
Я хочу скопировать текстовый файл в вектор и передать все строки, НО я хочу обработать каждую строку с помощью ////code.. до следующего. Я борюсь с логикой цикла.
НАПРИМЕР
строка 1 загружается в поток и копируется в буфер обмена, теперь сделайте что-нибудь со строкой 1
следующий>
строка 2 загружается в поток и копируется в буфер обмена, теперь сделайте что-нибудь со строкой 2 и так далее..
input.txt выглядит так :
000000
000001
000002
000003
000004
000005
000006
000007
000008
Итак, возьмите 000000, скопируйте его в буфер обмена, запустите ////code.. на 000000, а затем проделайте то же самое с 000001, 000002, 000003, 000004 ... и так далее.
Любой совет будет оценен по достоинству.
КОД НИЖЕ:
#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"));
////code..
//Do something to line 1 of stream
//Do something to line 2 of stream
//Do something to line 3 of stream
//.....
//
// 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());
std::getchar();
}
return 0;
}
Что означает запустить ////code.. на 000000?
@super ////code.. означает обработку строк, например, добавить _1 или ,, или скопировать только строку 000000, или скопировать только строку 000003.
@MALKAVIAN Хорошо, а как бы вы узнали, что делать с определенной строкой? Я предполагаю, что вы делаете разные вещи с разными линиями.





Вам просто нужно определить, что такое «что-то делать», и использовать его для преобразования каждого элемента.
std::string DoSomething(std::string line)
{
return "Some " + line + " Change";
}
int main()
{
std::vector<std::string> vecOfStr;
// Get the contents of file in a vector.
bool result = getFileContent("input.txt", vecOfStr);
if (result)
{
// Transform
std::transform(vecOfStr.begin(), vecOfStr.end(), vecOfStr.begin(), DoSomething);
// Populate & Display
std::stringstream ss;
std::copy(vecOfStr.begin(), vecOfStr.end(), std::ostream_iterator<std::string>(ss, "\n"));
std::copy(vecOfStr.begin(), vecOfStr.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
// 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());
std::getchar();
}
return 0;
}
Насколько я понимаю, вы хотите выполнить некоторую обработку ввода - прочитать из текстового файла - и затем отправить обработанные данные в буфер обмена? Верно? У вас есть все данные в вашем векторе строк. Каждый элемент в векторе представляет собой строку в файле, почему бы вам просто не зациклить свой вектор - перед копированием в поток - выполнить обработку, а затем скопировать его?