Gravando em duplicidade no BD

Tenho um arquivo texto onde importo os dados do mesmo e insiro no banco com sc_exec_sql (texto), porem está inserindo em duplicidade, alguem poderia me ajudar, segue o codigo:

$arquivo = fopen ("…/4_3_4.txt", “r”);
$num_linhas=0;
//faco um loop para percorrer o arquivo linha a linha ate o final do arquivo
while (!feof ($arquivo)) {
//se extraio uma linha do arquivo e nao eh false
if ($buffer = fgets($arquivo)){
//acumulo uma na variavel número de linhas
$num_linhas++;
//acumulo o número de caracteres desta linha
$modelo_docto = substr($buffer, 0, 2);
$serie_docto = substr($buffer, 2, 5);
$numero_docto = substr($buffer, 7, 9);
$dt_emissao = substr($buffer, 16,8);
$cod_participante = substr($buffer, 24,14);
$numero_item = substr($buffer, 38,3);
$cod_merc_serv = substr($buffer, 41,20);
$desc_complementar = substr($buffer, 61,45);
$cfop = substr($buffer, 106,4);
$cod_nat_operacao = substr($buffer, 110,6);
$ncm = substr($buffer, 116,8);
$qtde = substr($buffer, 124,17);
$unidade = substr($buffer, 141,3);
$vlr_unitario = substr($buffer, 144,17);
$vlr_total = substr($buffer, 161,17);
$vlr_desconto = substr($buffer, 178,17);
$ind_trib_ipi = substr($buffer, 195,1);
$aliquota_ipi = substr($buffer, 196,5);
$base_calculo_ipi = substr($buffer, 201,17);
$vlr_ipi = substr($buffer, 218,17);
$sit_trib_estadual = substr($buffer, 235,3);
$ind_trib_icms = substr($buffer, 238,1);
$aliquota_icms = substr($buffer, 239,5);
$base_icms_proprio = substr($buffer, 243,17);
$vlr_icms_proprio = substr($buffer, 262,17);
$base_icms_subst = substr($buffer, 278,17);
$vlr_icms_subst = substr($buffer, 295,17);
$ind_mov_fisica = substr($buffer, 312,1);
$sit_trib_ipi = substr($buffer, 313,2);
if ($num_linhas <= 2 ) {
sc_exec_sql(“INSERT INTO tabela_434(modelo_docto, serie_docto, numero_docto,
dt_emissao, cod_participante, numero_item, cod_merc_serv,
desc_complementar,cfop,cod_nat_operacao,ncm,qtde,unidade,
vlr_unitario,vlr_total,vlr_desconto,ind_trib_ipi,aliquota_ipi,
base_calculo_ipi,vlr_ipi, sit_trib_estadual, ind_trib_icms,
aliquota_icms, base_icms_proprio, vlr_icms_proprio,
base_icms_subst, vlr_icms_subst, ind_mov_fisica, sit_trib_ipi)
VALUES(’$modelo_docto’, ‘$serie_docto’, ‘$numero_docto’,
‘$dt_emissao’, ‘$cod_participante’, ‘$numero_item’, ‘$cod_merc_serv’,
‘$desc_complementar’,’$cfop’,’$cod_nat_operacao’,’$ncm’,’$qtde’,’$unidade’,
‘$vlr_unitario’,‘vlr_total’,‘vlr_desconto’,‘ind_trib_ipi’,‘aliquota_ipi’,
‘$base_calculo_ipi’,’$vlr_ipi’, ‘$sit_trib_estadual’, ‘$ind_trib_icms’,
‘$aliquota_icms’, ‘$base_icms_proprio’, ‘$vlr_icms_proprio’,
‘$base_icms_subst’, ‘$vlr_icms_subst’, ‘$ind_mov_fisica’, ‘$sit_trib_ipi’)”);
}
}
}
fclose ($arquivo);

Utilize replace no lugar do insert

Bom dia,Juro que não entendi a resposta. Estou inserindo os dados do arquivo texto no banco, pelo que entendi do comando REPLACE, ele substitui algo que ja existe. Bom se tiver algum exemplo pratico pra eu poder usar agradeço.

http://dev.mysql.com/doc/refman/5.5/en/replace.html

Prezado Haroldo,

mesmo usando o replace continua duplicando.
replace into tabela (campos) value (‘variaveis’)

então vc não tem indice excluisivo para os campos que deseja evitar a duplicidade.

Cri um índice exclusivo com esses campos.

ok, funcionou, agora pretendo fazer o caminho inverso, gerar o arquivo texto pois ja alterei os dados. Cada linha tem que ter 316 caracteres e sem nada que os separem, exemplo:
01c000001000000010000000456070000000energiasolarpcs0001.

Alguem poderia me ajudar, pois nao sei nem por onde começar, rsrsrs.

com a macro sc_select você lê os dados.

com a função str_pad, você determina o tamanho de um campo preenchendo com um determinado caractere a esquerda ou a direita.

com a função php fopen você cria um arquivo texto e fwrite você escreve nele

$fp = fopen(‘data.txt’, ‘w’);
fwrite($fp, ‘1’);
fwrite($fp, ‘23’);
fclose($fp);

Consegui gravar o arquivo mas somente com 1 registro, pois não estou conseguindo percorrer a tabela veja, como ficou meu codigo:

sc_lookup(ds,“SELECT count(*) from tabela 434”);
$tot_reg = {ds}[0][0];
sc_lookup(dataset,“SELECT modelo_docto, serie_docto, numero_docto,
dt_emissao, cod_participante, numero_item, cod_merc_serv,
desc_complementar,cfop,cod_nat_operacao,ncm,qtde,unidade,
vlr_unitario,vlr_total,vlr_desconto,ind_trib_ipi,aliquota_ipi,
base_calculo_ipi,vlr_ipi, sit_trib_estadual, ind_trib_icms,
aliquota_icms, base_icms_proprio, vlr_icms_proprio,
base_icms_subst, vlr_icms_subst, ind_mov_fisica, sit_trib_ipi FROM tabela_434”);
$i=0;
while ($i < $tot_reg) {
$modelo_docto = {dataset}[$i][0];
$serie_docto = {dataset}[$i][1];
$serie_docto = str_pad($serie_docto, 5," “, STR_PAD_RIGHT);
$numero_docto = {dataset}[$i][2];
$dt_emissao = {dataset}[$i][3];
$cod_participante = {dataset}[$i][4];
$cod_participante = str_pad($cod_participante, 14,” “, STR_PAD_RIGHT);
$numero_item = {dataset}[$i][5];
$cod_merc_serv = {dataset}[$i][6];
$cod_merc_serv = str_pad($cod_merc_serv, 20,” “, STR_PAD_RIGHT);
$desc_complementar = {dataset}[$i][7];
$desc_complementar = str_pad($desc_complementar, 45,” “, STR_PAD_RIGHT);
$cfop = {dataset}[$i][8];
$cod_nat_operacao = {dataset}[$i][9];
$ncm = {dataset}[$i][10];
$qtde = {dataset}[$i][11];
$unidade = {dataset}[$i][12];
$vlr_unitario = {dataset}[$i][13];
$vlr_total = {dataset}[$i][14];
$vlr_desconto = {dataset}[$i][15];
$ind_trib_ipi = {dataset}[$i][16];
$aliquota_ipi = {dataset}[$i][17];
$base_calculo_ipi = {dataset}[$i][18];
$vlr_ipi = {dataset}[$i][19];
$sit_trib_estadual = {dataset}[$i][20];
$ind_trib_icms = {dataset}[$i][21];
$aliquota_icms = {dataset}[$i][22];
$base_icms_proprio = {dataset}[$i][23];
$vlr_icms_proprio = {dataset}[$i][24];
$base_icms_subst = {dataset}[$i][25];
$vlr_icms_subst = {dataset}[$i][26];
$ind_mov_fisica = {dataset}[$i][27];
$sit_trib_ipi = {dataset}[$i][28];
$conteudo = $modelo_docto .$serie_docto .$numero_docto .$dt_emissao .$cod_participante .$numero_item .$cod_merc_serv
.$desc_complementar .$cfop .$cod_nat_operacao .$ncm .$qtde .$unidade .$vlr_unitario .$vlr_total .$vlr_desconto
.$ind_trib_ipi .$aliquota_ipi .$base_calculo_ipi .$vlr_ipi .$sit_trib_estadual .$ind_trib_icms
.$aliquota_icms .$base_icms_proprio .$vlr_icms_proprio .$base_icms_subst .$vlr_icms_subst .$ind_mov_fisica
.$sit_trib_ipi .”\n";
if ($i <= $tot_reg) {
$i++;
}
}
fwrite(fopen(“434.txt”,“a+”),$conteudo);

Funcionou, eu estava vacilando no codigo, o fwrite() não estava dentro do while por isso gravava so o ultimo, na quebra de linha tive que adicionar o /r/n pois so o /n não funcionava. Porem não estou conseguindo fazer com que a variavel que conta os registros da tabela sirva de parametro para comparação.

exemplo:

while ($i < $tot_reg) {

}

so estou conseguindo manualmente

while ($i < 718) { //718 é a quant. de registros da tabela

}

Veja se o tipo da variável TOT_REG é do tipo INT ou se é CHAR. Pode ser por ai o problema.