필자가해야 할 일은 입력란에서 *
을 입력하여 주석이 식별되는 입력 파일에서 일부 매개 변수 값을 읽는 것입니다. 은 "유용한"라인의 값은 다음과 같이 세미콜론으로 구분됩니다C++ - 출력 스트림의 한 줄 시작 부분에서 다른 문자로 바꾸기
10; 32541615; 0.18; 0.45; 0.00015; 0.01485; 0.03;
그리고 내 입력 파일이 같은 여러 줄 수 있습니다.
내가 뭘하고 싶은지 *
을 각 라인의 시작 부분에 삽입하면된다. 두 번째로 파일을 읽으면 다음 라인으로 건너 뛰고 바로 다음 라인으로 넘어갈 것이다. 하나.
내 목표는 내 프로그램의 여러 인스턴스를 동시에 실행하고 파일을 순서대로 액세스하여 필요한 입력 매개 변수를 얻는 것이므로 필요합니다. 그래서 나는 각 인스턴스가 다른 매개 변수를 갖기를 원한다. 나는이 같은, 각 행의 시작 부분에 더미 문자를 삽입 할 일은 생각 무엇
: 나는 그래서 그것을 읽을 때 *
와
b10; 32541615; 0.18; 0.45; 0.00015; 0.01485; 0.03;
을하고 (이 예에서는 b
을)를 교체 두 번째로 나는 주석을 다루는 줄을 읽었습니다. 나는 peek()
호출 b
를 읽을 수 있지만, *
문자가 항상 파일의 끝에 추가되면
put('*')
및
<< '*'
을 사용했습니다. 파일의 중간에 쓸 수는 없지만 파일 중간에 덮어 쓸 수는 있지만 읽었습니다. 내가 무엇을 할 수 있을지?
* FORMAT:
* MAX_HEIGHT; SEED; p0; p1; pd; pp; epsilon;
b10; 32541615; 0.18; 0.45; 0.00015; 0.01485; 0.03;
b40; 32541615; 0.18; 0; 0.00015; 0.01485; 0.03;
당신은 어떤 인스턴스 프로그램이 어떤 매개 변수를 사용하는지 알아야합니까? 아마 각 인스턴스에 대해 하나의 매개 변수 파일을 사용하고 명령 줄 인수로 파일 이름을 전달합니다. 또는 하나의 파일을 고집한다면 파일의 주어진 줄에서 매개 변수를 읽습니다 (명령 줄 인수로 다시 전달됨). Imho가 프로그램의 여러 인스턴스를 읽고 동일한 파일에 쓰는 것만으로도 불필요한 overcomplication이됩니다. – user463035818
근본적인 문제는 일부 동기화가 없으면 프로그램의 여러 인스턴스가 이전에 같은 행을 읽었던 경쟁 조건을 방지 할 수 없다는 것입니다 그들 중 누구라도 라인을 업데이트하기 위해 변경을합니다. 이 문제를 해결하면 원래의 문제를 더 깔끔하게 해결할 수 있다는 이점이 있습니다. –
@MichaelBurr 알아요.물론 한 번에 같은 파일에서 여러 스레드를 읽으려면 먼저 동기화를 구현해야합니다. 하지만이 문제에 간단한 대답이 있는지 궁금했습니다. – jackscorrow