2011-08-19 6 views
0

exaplme 들어, 일부 버퍼가 : const char* buf 다음 내용 (MySQL 패킷) :인용 부호로 버퍼의 일부를 쓰는 가장 좋은 방법은 무엇입니까?

72 00 00 00 select * from `db` where (`name` = "Bill's car") 

및 ostream 쿼리를 인용하여 작성해야합니다. 결과는 다음이어야합니다.

select * from `db` where (`name` = \"Bill\'s car\") 

<< quote <<이 따옴표를 만들고 ostream.write(buf,len)이 필요한 부분을 작성한다는 것을 알고 있습니다.

그러나 둘 모두에게 가장 좋은 솔루션은 무엇입니까?

+0

그것은 여기 요구되고 있는지 불분명 .. –

+0

그는 뭔가를 구문 분석하고 싶어 ... 문자 ' 또는 "하고 필요에 빠져 있는지 확인하기 위해 for_each 및 사용자 정의 펑터를 사용합니다. – Lalaland

+0

원래, 쿼리를 얻기 위해 mysql 클라이언트 패킷을 구문 분석하고 싶습니다. – vladimar

답변

1

뭔가 행해야 :

std::copy(buffer + index_of_start_of_sql, buffer + index_of_end_of_sql, std::ostream_iterator<char>(std::cout, "")); 

이 사본 (이 경우 std::cout)에서 출력 스트림 문자 버퍼 문자의 내용. 따옴표를 처리하는 것에 대해 걱정할 필요가 없습니다.

두 가지 인덱스 (SQL 청크의 시작과 끝)가 올바른지 확인해야합니다.

참고 : 버퍼에있는 내용은 인쇄되지만 따옴표는 이스케이프 처리되지 않습니다. 따옴표를 벗어나야하는 경우에는 다른 접근 방식을 취해야합니다. 예 :

-1

정규 표현식을 사용하는 완벽한 예가 될 것이라고 생각합니다. 이런

+0

정규 표현식이 모든 것에 대한 구원이라고 믿는 종교적 컬트가 있습니까? –

+0

이것은 "다른"질문에 대한 답이었습니다. __- = Bill 's Car = -__에서 Bill의 차를 추출하는 방법. 그 때문에 정규 표현식이 가장 간결한 대답이었을 것입니다. – Lalaland