AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

All perguntas(coding)

Martin Hope
Sitepor500.com.br
Asked: 2025-04-19 23:11:17 +0800 CST

PHP não libera memória da variável

  • 7

Tenho um servidor com dois scripts PHP rodando continuamente em segundo plano. Um desses scripts, por algum motivo, não está liberando memória e está fazendo o outro script falhar, pois, eventualmente, não tenho mais RAM disponível no servidor.

Criei uma POC bem simples para você verificar por conta própria. Basicamente, tenho uma função que verifica a memória RAM disponível (usando um freecomando) três vezes e, após a primeira vez, executo a função que faz com que a memória seja consumida e nunca liberada. Eu até tentei, gc_collect_cyclesmas nada acontece.

O que me impressiona é que, após o script terminar completamente, se eu acessar meu SSH e executar "free", toda a memória usada será liberada. No entanto, se eu adicionar um sleep longo no final do meu script, a memória continuará sendo usada. Observe que, dentro da função, test()uma variável local é criada e explicitamente desativada, mas, por algum motivo, o PHP ainda retém a memória.

<?php

set_time_limit(0);
ini_set("memory_limit","-1");



function show_available_ram() {

    $temp1111 = shell_exec('sudo free -m');

    preg_match("/Mem: +[0-9]+ +[0-9]+ +[0-9]+ +[0-9]+ +[0-9]+ +([0-9]+)/",$temp1111,$temp2222);

    return $temp2222[1] . " MB";

}



function test() {

    $temp3333 = array();
    
    for ($i=0;$i<1000000;$i++) {
        
        $temp3333[] = array("key1" => md5($i), "key2" => $i);
        
    }

    unset($temp3333);

}



echo "\nAAA: " . show_available_ram();

test();

sleep(2);

echo "\nBBB: " . show_available_ram();

//I know it should not be needed the line below, but I am trying it anyway but it does not help.
gc_collect_cycles();

sleep(2);

echo "\nCCC: " . show_available_ram();

?>

O código acima gera:

AAA: 1297 MB
BBB: 873 MB
CCC: 869 MB

Assim, você pode ver claramente a memória sendo usada (em BBBe CCCmas não liberada mesmo depois de test()já ter terminado.

No código acima, usei alguns sleeppara que o PHP tenha tempo de coletar lixo, mas isso não ajuda em nada.

  • 1 respostas
  • 110 Views
Martin Hope
Kason Glover
Asked: 2025-04-19 22:58:35 +0800 CST

Gráfico exploratório para análise de tópicos em R

  • 9

Estou fazendo uma análise exploratória básica de tópicos de duas respostas a perguntas diferentes e tentando visualizar os resultados por pergunta. Estou trabalhando no RStudio e usando um arquivo RMarkdown. O conjunto de dados de exemplo que criei aqui é bem menor do que o que estou usando, o que não deve ser um problema para descrever o problema. Abaixo está todo o código para obter a matriz e a tabela gama, mas tudo funciona bem.

library(tidyverse)
library(tidytext)
library(stm)

#here is a representative example of my data
Term <- c("y57","t44","y57","t44","y57","t44","t44","y57")
Question <- c(1,1,1,1,2,2,2,2)
Id <- c(1,2,1,2,3,4,4,3)
Text <- c("words that are all here in this dataframe", "other sorts of things to meet the needs of the data", "stuff and the like about such and such and this that and the other", "et cetera and so on and so forth and on ad nauseum", "bla bla shockablooey the hooey is newey to youey", "wooly sheep are superior to all other sheep", "come together in this hour of great trial", "right words are different from wrong ones")

df_data <- data.frame(term = Term, question = Question, id = Id, text = Text)

#unnesting the words into a new dataframe
df_tidy <- 
  df_data %>% 
  unnest_tokens(word,text)

#setting up the necessary pieces for the topic analysis plot
df_sparse <-
  df_tidy %>% 
  count(id,word) %>% 
  filter(n > 1) %>% 
  cast_sparse(id,word,n)

set.seed(216)
topic_model_5 <- stm(df_sparse, K = 5)

df_gamma_5 <-
  tidy(topic_model_5,
       matrix = "gamma",
       document_names = rownames(df_sparse))

Meu problema está na preparação final para a plotagem, na qual quero ordenar os tópicos por uma variável (pergunta) para obter dois gráficos. Estou tentando usar a função left_join entre "df_data" e "df_gamma_5". Pelo menos é isso que acho que este segmento está tentando fazer...

#object type troubleshooting that made sense to me
df_data$question <- as.factor(df_data$question)
df_data$id <- as.character(df_data$id)

#what I can't get unstuck, which I think has to be from the left_join somehow
df_gamma_5 %>% 
  left_join(
    df_data %>% 
      select(question, document = id) %>% 
      mutate(question, fct_inorder(question)),
    relationship = "many-to-many"
  ) %>% 
  mutate(topic = factor(topic)) +
  ggplot(aes(gamma, topic, fill = topic)) +
  geom_boxplot(alpha = 0.7, show.legend = TRUE) +
  ggtitle("topics by question") +
  facet_wrap(vars(term)) %>% 
  print()

A mensagem de erro que recebo dessa linha é:

Joining with `by = join_by(document) `Warning: Detected an unexpected many-to-many relationship between `x` and `y`. Error in `fortify()`:
! `data` must be a <data.frame>, or an object coercible by
  `fortify()`, or a valid <data.frame>-like object coercible by
  `as.data.frame()`, not a <uneval> object.
ℹ Did you accidentally pass `aes()` to the `data` argument?
Run `rlang::last_trace()` to see where the error occurred.

Isso está me deixando louco porque segui um exemplo online usando dados de letras de Taylor Swift ( https://www.youtube.com/watch?v=rXDv0ZuX0Fc&t=216s ) e o código que escrevi para esse exemplo funcionou perfeitamente. O gráfico que quero é essencialmente o mesmo do vídeo, exceto que em vez de gráficos por álbum (n=11) quero gráficos por pergunta (n=2). Em uma análise mais complexa, gostaria de um 2x2 com cada amostra de gráfico selecionada por termo e pergunta, mas isso é para outro dia. Suspeito que o problema tenha algo a ver com o fato de que, ao contrário do catálogo de Taylor Swift, onde as letras de cada música são uma observação distinta, tenho duas observações de texto diferentes para cada variável id. Não sei se esse é o problema, e mesmo se soubesse, não sei como resolvê-lo.

Estou aprendendo R (e programação em geral) há dez dias, então qualquer ajuda será muito mais difícil do que eu tentar me agarrar a qualquer coisa. Obrigado!

  • 1 respostas
  • 75 Views
Martin Hope
Goulven
Asked: 2025-04-19 22:26:06 +0800 CST

Prompt do Powershell, caractere vermelho à direita em caso de erro

  • 7


Estou tentando criar meu próprio prompt do Powershell em $profile.

Por enquanto, tenho o seguinte:

$ESC = [char]27
$RESET = "$ESC[0m"
$pwd = $executionContext.SessionState.Path.CurrentLocation

function prompt {
  $fontColor = "2;192;192;192m"
  $backColor = "2;64;96;128m"
  $shdwColor = "2;32;48;64m"

  $main   = "$RESET$ESC[38;$fontColor$ESC[48;$backColor"
  $shadow = "$RESET$ESC[38;$backColor$ESC[48;$shdwColor"
  $end    = "$RESET$ESC[38;$shdwColor"

  #      "$main $pwd  $shadow $end ";
  #      "$main $pwd  $shadow $end$RESET ";
  #      "$main $pwd  $shadow $end$ESC[0m ";
  #      "$main $pwd  $shadow $end$ESC[0 ";
  #      "$main $pwd  $shadow $end $RESET";
  #      "$main $pwd  $shadow $end $ESC[0m";
  return "$main $pwd  $shadow $end $ESC[0";
}

O que resulta da seguinte forma:
Perfil do Powershell como segue: C:\Windows\System32 / /

Quando eu digito lsou dir(por exemplo), tudo funciona bem.

Entretanto, quando digito uma string, meu zero à direita (de $ESC[0) aparece vermelho, e quando fecho a string, o zero muda para branco.
Prompt do Powershell com um "0" aparecendo

Isso também aparece quando coloco $RESETou $ESC[0mem vez de $ESC[0(mas com um "m" em vez de "0"), e quando os removo são os que aparecem em vermelho...
Mesma imagem acima, mas com  como caractere final

Também podemos ver que no prompt padrão do Powershell, o ">" fica vermelho quando abrimos uma string:
Prompt padrão do Powershell com ">" vermelho na abertura da string

Alguém já passou pelo mesmo problema ao fazer prompts e, se sim, como você removeu essa coloração ou como você se adaptou?

Obrigado !

powershell
  • 2 respostas
  • 62 Views
Martin Hope
mcpierce
Asked: 2025-04-19 21:31:33 +0800 CST

A visualização foi criada corretamente antes, agora falha sempre no Postgres usando Liquibase

  • 5

Esta é a vista:

SELECT DISTINCT d.comic_book_id   as comic_book_id,
                            d.comic_detail_id as comic_detail_id,
                            d.archive_type    as archive_type,
                            d.comic_state     as comic_state,
                            CASE
                                WHEN EXISTS(SELECT *
                                            FROM comic_metadata_sources s
                                            WHERE s.comic_book_id = d.comic_book_id)
                                    THEN false
                                ELSE true END AS is_unscraped,
                            d.comic_type      as comic_type,
                            d.publisher       as publisher,
                            d.series          as series,
                            d.volume          as volume,
                            d.issue_number    as issue_number,
                            d.description     as description,
                            d.notes           as notes,
                            (SELECT RIGHT(CONCAT('0000000000', d.issue_number), 10)) as sortable_issue_number, d.title as title, (
            SELECT COUNT(*)
            FROM comic_pages cp
            WHERE cp.comic_book_id = d.comic_book_id) as page_count
                , d.cover_date as cover_date
                , CASE WHEN d.cover_date IS NULL THEN 0 ELSE MONTH (cover_date)
            END
            as month_published
                    , CASE WHEN d.cover_date IS NULL THEN 0 ELSE YEAR (cover_date)
            END
            as year_published,
                            d.store_date as store_date,
                            d.added_date as added_date
            FROM comic_details d

Na v2 do nosso projeto, essa visualização foi criada e funcionou perfeitamente.

Atualmente, estou trabalhando na versão 3 do projeto, e parte do requisito é fornecer um novo conjunto de migrações para permitir que os usuários criem as tabelas do zero e que elas tenham a mesma aparência que um usuário existente obteria. Então, copiei o conteúdo da visualização da nossa base de código da versão 2 para a migração da versão 3.

Quando executo a migração em todos os outros bancos de dados suportados (H2, MySQL, Mariadb), ela e todas as operações relacionadas funcionam bem.

Mas, quando executo no Postgres, ele retorna um erro com:

Caused by: org.postgresql.util.PSQLException: ERROR: function month(date) does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.

Mas, quando volto ao nosso código v2 e executo exatamente o mesmo conteúdo de migração do Liquibase, funciona perfeitamente, sem problemas. Até copiei o corpo da migração antiga para a nova, mas falhou . Mas o código antigo ainda funciona na mesma instância do Postgres e cria uma visualização funcional.

Tentei substituir a chamada para month()e year()por:

THEN SELECT EXTRACT(MONTH FROM cover_date)

e:

THEN SELECT EXTRACT(YEAR FROM cover_date)

A visualização é criada corretamente, mas o tempo de execução as substitui por uma chamada para MONTH()e YEAR()respectivamente, e o Postgres novamente exibe a mesma mensagem de erro.

Outra diferença entre nossos códigos v2 e v3 é que na v3 migramos do Spring Boot 3.2.3 para o 3.4.1. Não tenho certeza se a versão do Liquibase mudou entre eles, mas será que pode haver algum tipo de bug na versão mais recente do LB? Presumo que o Spring a tenha atualizado para uma versão mais recente.

java
  • 2 respostas
  • 76 Views
Martin Hope
Qwe Qwe
Asked: 2025-04-19 21:21:02 +0800 CST

Criando uma função utilitária de string única com comportamento duplo em C++

  • 10

Estou desenvolvendo uma classe utilitária de strings que fornece diversas funções de manipulação de strings. Quero que os usuários tenham duas opções ao usar essas funções:

  • Crie e retorne uma nova string com a manipulação aplicada
  • Atualizar a sequência de caracteres existente no local

Atualmente, implementei isso com sobrecarga de função:

struct String final {
    static std::string toUpperCase(const std::string& str) {
        std::string result = str;
        std::transform(result.begin(), result.end(), result.begin(), 
                       [](unsigned char c) { return std::toupper(c); });
        return result;
    }
    
    static void toUpperCase(std::string& str) {
        std::transform(str.begin(), str.end(), str.begin(), 
                       [](unsigned char c) { return std::toupper(c); });
    }
};

int main() {
std::string str {"helloworld"};
std::string test = String::toUpperCase(str);
String::toUpperCase(str);
}

Minha pergunta: É possível combinar essas duas funções em uma única função que pode:

-> Retorna uma nova string maiúscula quando necessário
-> Modifique uma string no local quando desejado

Qual seria a abordagem C++ mais elegante e idiomática para isso? Considerei modelos e parâmetros opcionais, mas não tenho certeza de qual abordagem forneceria a API mais limpa para os usuários.

Se não for possível combinar essas duas funções em uma única função, também estou interessado em saber como eliminar a std::transform...duplicação de code( ) entre elas.

Observação: Estou ciente de que a implementação que mostrei não compilaria. Estou compartilhando-a especificamente para ilustrar a abordagem que eu estava considerando e os desafios que estou enfrentando com sobrecarga de funções e especialização de modelos.

c++
  • 1 respostas
  • 144 Views
Martin Hope
robamler
Asked: 2025-04-19 20:59:17 +0800 CST

`OpSDot` no SPIR-V com "Packed Vector Format" requer que suas duas entradas sejam assinadas ou não assinadas?

  • 6

A especificação SPIR-V define uma opção de Formato de Vetor Empacotado para as operações OpSDot, OpUDote OpSUDot. Quando utilizadas, as outras duas entradas da operação devem ser números inteiros de 32 bits, que são então interpretados como vetores quadridimensionais compactados de números inteiros de 8 bits.

Minha pergunta

No caso do "Formato de Vetor Empacotado", a sinalização desses argumentos inteiros escalares de 32 bits precisa corresponder à sinalização (lógica) de seus componentes de 8 bits, ou os escalares compactados de 32 bits precisam ser sem sinal de qualquer maneira (como, por exemplo, é o caso no WGSL )?

Por que estou confuso sobre isso

A especificação paraOpSDot e OpUDotsomente afirma que "Vetor 1 e Vetor 2 devem ter o mesmo tipo" e que "devem ser inteiros de 32 bits [...] ou vetores", mas não especifica se devem ou não ter sinal. Se forem vetores (desempacotados), parece-me óbvio que OpSDotespera vetores com sinal e OpUDotespera vetores sem sinal. Mas ao empacotar quatro inteiros de 8 bits com sinal em um único escalar de 32 bits, parece-me mais natural tratar o resultado como um inteiro sem sinal ( como em WGSL ) porque, neste ponto, é apenas uma "aglomeração de bits" para a qual as operações aritméticas padrão não são significativas de qualquer maneira.

A validação com spirv-valparece aceitar de qualquer forma, mas aceita até entradas inteiras de 32 bits com sinal para produtos escalares empacotados sem sinalOpUDot com , o que me parece estranho, então não confio no validador aqui. Para aumentar minha confusão, a especificação deOpSUDot (que realiza um produto escalar inteiro com/sem sinal misto) afirma explicitamente que o segundo argumento deve ser sem sinal, mas qualifica que isso se aplica somente se ambos os argumentos forem vetores (desempacotados):

[...] Quando o Vetor 1 e o Vetor 2 são vetores , os componentes do Vetor 2 devem ter um Sinal de 0. [← Sinal definido se as entradas forem vetores (desempacotados)]

Quando o Vetor 1 e o Vetor 2 são tipos inteiros escalares, o Formato de Vetor Empacotado deve ser especificado para selecionar como os inteiros devem ser interpretados como vetores. [← caso em que os argumentos são "tipos inteiros escalares" (ou seja, empacotados) discutidos separadamente, sem especificar a sinalização]

(Ênfase e anotações em [...] minhas.)

vulkan
  • 1 respostas
  • 22 Views
Martin Hope
Exicode
Asked: 2025-04-19 20:41:58 +0800 CST

Por que a visualização e o emulador do Jetpack Compose mostram resultados diferentes?

  • 5

Prévia:

insira a descrição da imagem aqui

Dispositivo virtual:

insira a descrição da imagem aqui

Código:

@Composable
fun ChatView(
    recentChat: RecentChat,
    onClick: () -> Unit
) {
    Row(
        horizontalArrangement = Arrangement.spacedBy(8.dp),
        verticalAlignment = Alignment.CenterVertically,
        modifier = Modifier
            .fillMaxWidth()
            .clickable(onClick = onClick)
    ) {

        Image(...)
        Column {

            Row(
                horizontalArrangement = Arrangement.SpaceBetween,
                verticalAlignment = Alignment.CenterVertically,
                modifier = Modifier.fillMaxWidth()
            ) {
                Text(recentChat.user.userName, maxLines = 1)
                Text(
                    text = timestamp,
                    fontSize = 12.sp
                )
            }

            Row(
                horizontalArrangement = Arrangement.SpaceBetween,
                verticalAlignment = Alignment.CenterVertically,
                modifier = Modifier.fillMaxWidth()
            ) {
                Text(
                    text = recentChat.chat.lastMessage,
                    maxLines = 1,
                    modifier = Modifier.weight(1f)
                )

                if (recentChat.newMessagesCount > 0) {
                    Box(
                        contentAlignment = Alignment.Center,
                        modifier = Modifier
                            .defaultMinSize(20.dp, 20.dp)
                            .background(Color(0xFF65B343), CircleShape)
                            .padding(2.dp)
                    ) {
                        Text(
                            text = "${recentChat.newMessagesCount}",
                            fontSize = 14.sp
                        )
                    }
                }
            }

        }


    }

}

A visualização é simples. Acima na hierarquia de composição, apenas a tela que contém a lista dessas visualizações. A tela com a lista de itens não afeta seu tamanho ou preenchimento. Onde está o erro?

android-jetpack-compose
  • 1 respostas
  • 43 Views
Martin Hope
Paolo Cimmino
Asked: 2025-04-19 20:39:07 +0800 CST

Conversões de data e hora por meio de diferentes sistemas

  • 4

Atualmente, estou trabalhando em um projeto em que preciso importar dados de várias fontes e usá-los para criar um sistema de relatórios.

Uma das fontes é uma tabela Hive que tem uma coluna de registro de data e hora ( VARCHAR) formatada assim:

'Jan 18 2019 1:54PM' 

Meu objetivo é, usando SQL, converter esta coluna para algo assim (formato de 24 horas):

'YYYY-MM-DD HH:Mi:00'  

Preciso trabalhar com o IBM Datastage para ler dados do Hive e gravar dados em um banco de dados Oracle. O banco de dados Oracle é usado para atualizar uma instância tabular do SQL Server, onde criarei meus relatórios usando o PowerBI.

Como eu disse, sou obrigado a usar um software específico, de acordo com a política do cliente. Posso usar o SQuirreL SQL para verificar as tabelas de origem, mas até agora não consegui encontrar uma maneira de atingir meu objetivo.

Algum conselho?

sql
  • 3 respostas
  • 95 Views
Martin Hope
marion
Asked: 2025-04-19 20:32:55 +0800 CST

Como faço para corrigir um problema do Powershell com a seleção de botões?

  • 7

Usei o ChatGPT para gerar o código e entender como fazer isso sozinho, e funciona na maior parte do tempo. O script verifica minhas pastas de TV e Filmes em busca de arquivos ausentes para melhorar o funcionamento do Plex (folder.jpg, theme.mp3 e assim por diante) e mostra quais estão faltando e quantos.

Funciona perfeitamente na pasta de filmes, mas eu não consigo (nem a IA) descobrir como consertar isso clicando no botão TV ou TV encerrada e fazendo com que ele pesquise nessas pastas.

Meu melhor palpite é que a variável $pathMap na linha 167 é a chave e não está sendo atualizada corretamente para esta parte - $global:fixedPath = $pathMap

Alguém poderia corrigir isso e me explicar como descobrir como fazer isso?

Windows 10 22H2 e Powershell PSVersão 5.1.19041.5737

    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing
    
    # Create form
    $form = New-Object System.Windows.Forms.Form
    $form.Text = "Marion's Plex checker"
    $form.Size = New-Object System.Drawing.Size(700, 700)
    $form.StartPosition = "CenterScreen"
    
    # Fixed folder path
    $fixedPath = "D:\ServerFolders\Videos\02 - Movies"
    
    # Path label
    $label = New-Object System.Windows.Forms.Label
    $label.Text = "Checking subfolders in: $fixedPath"
    $label.Location = New-Object System.Drawing.Point(120, 20)
    $label.Size = New-Object System.Drawing.Size(550, 20)
    $form.Controls.Add($label)
    
    # Summary label
    $summaryLabel = New-Object System.Windows.Forms.Label
    $summaryLabel.Text = ""
    $summaryLabel.Location = New-Object System.Drawing.Point(120, 45)
    $summaryLabel.Size = New-Object System.Drawing.Size(550, 20)
    $form.Controls.Add($summaryLabel)
    
    # Output box
    $logBox = New-Object System.Windows.Forms.TextBox
    $logBox.Multiline = $true
    $logBox.ScrollBars = "Vertical"
    $logBox.Location = New-Object System.Drawing.Point(120, 75)
    $logBox.Size = New-Object System.Drawing.Size(550, 350)
    $logBox.Anchor = "Top,Bottom,Left,Right"
    $logBox.ReadOnly = $true
    $form.Controls.Add($logBox)
    
    # Search file buttons (on the left)
    $fileTypes = @("theme.mp3", "folder.jpg", "background.jpg", "poster.jpg")
    $fileButtons = @{}
    $yPos = 20
    $global:selectedFile = "theme.mp3"
    
    foreach ($file in $fileTypes) {
        $btn = New-Object System.Windows.Forms.Button
        $btn.Text = $file
        $btn.Tag = $file
        $btn.Location = New-Object System.Drawing.Point(10, $yPos)
        $btn.Size = New-Object System.Drawing.Size(100, 30)
        $form.Controls.Add($btn)
        $fileButtons[$file] = $btn
        $yPos += 40
    
        $btn.Add_Click({
            $global:selectedFile = $this.Tag
    
            # Reset styles
            foreach ($b in $fileButtons.Values) {
                $b.UseVisualStyleBackColor = $true
            }
    
            # Highlight selected
            # Reset styles
            foreach ($b in $fileButtons.Values) {
                $b.UseVisualStyleBackColor = $true
                $b.BackColor = [System.Drawing.SystemColors]::Control
            }
    
            # Highlight selected
            $this.UseVisualStyleBackColor = $false
            $this.BackColor = 'LightBlue'
    
            $summaryLabel.Text = "Selected file: $global:selectedFile"
        })
    }
    
    # Scan button
    $scanButton = New-Object System.Windows.Forms.Button
    $scanButton.Text = "Scan"
    $scanButton.Location = New-Object System.Drawing.Point(10, 440)
    $scanButton.Size = New-Object System.Drawing.Size(100, 30)
    $form.Controls.Add($scanButton)
    
    # Create a new button for Movies, positioned to the right of the Scan button
    $moviesButton = New-Object System.Windows.Forms.Button
    $moviesButton.Text = "Movies"
    $moviesButton.Size = New-Object System.Drawing.Size(100, 30)
    $moviesButton.Location = New-Object System.Drawing.Point(120, 440)
    
    # Create a new button for TV, positioned next to the Movies button
    $tvButton = New-Object System.Windows.Forms.Button
    $tvButton.Text = "TV"
    $tvButton.Size = New-Object System.Drawing.Size(100, 30)
    $tvButton.Location = New-Object System.Drawing.Point(230, 440)
    
    # Create a new button for TV Ended, positioned next to the TV button
    $tvEndedButton = New-Object System.Windows.Forms.Button
    $tvEndedButton.Text = "TV Ended"
    $tvEndedButton.Size = New-Object System.Drawing.Size(100, 30)
    $tvEndedButton.Location = New-Object System.Drawing.Point(340, 440)  # Right of the TV button
    $tvEndedButton.Add_Click({
        Start-Process "D:\ServerFolders\Videos\TV (Ended)"  # Link to the TV Ended path
    })
    $form.Controls.Add($tvEndedButton)
    
    # Path variables for Movies, TV, and TV Ended
    $pathMap = @{
        "Movies"     = "D:\ServerFolders\Videos\02 - Movies"
        "TV Current" = "D:\ServerFolders\Videos\01 - TV"
        "TV Ended"   = "D:\ServerFolders\Videos\TV (Ended)"
    }
    
    # Default path for Movies
    $global:fixedPath = $pathMap["Movies"]
    $pathLabel.Text = "Scanning path: $global:fixedPath"
    
    # Add click event for Movies button
    $moviesButton.Add_Click({
        $global:fixedPath = $pathMap["Movies"]
        $pathLabel.Text = "Scanning path: $global:fixedPath"
        # Change button colors to indicate active path
        $moviesButton.BackColor = 'LightGreen'
        $tvButton.BackColor = [System.Drawing.SystemColors]::Control
        $tvEndedButton.BackColor = [System.Drawing.SystemColors]::Control
        # Start scanning the Movies path
        Write-Host "Scanning Movies path: $global:fixedPath"
        Scan-Folder -path $global:fixedPath
    })
    
    # Add click event for TV button
    $tvButton.Add_Click({
        $global:fixedPath = $pathMap["TV Current"]
        $pathLabel.Text = "Scanning path: $global:fixedPath"
        # Change button colors to indicate active path
        $tvButton.BackColor = 'LightGreen'
        $moviesButton.BackColor = [System.Drawing.SystemColors]::Control
        $tvEndedButton.BackColor = [System.Drawing.SystemColors]::Control
        # Start scanning the TV Current path
        Write-Host "Scanning TV path: $global:fixedPath"
        Scan-Folder -path $global:fixedPath
    })
    
    # Add click event for TV Ended button
    $tvEndedButton.Add_Click({
        $global:fixedPath = $pathMap["TV Ended"]
        $pathLabel.Text = "Scanning path: $global:fixedPath"
        # Change button colors to indicate active path
        $tvEndedButton.BackColor = 'LightGreen'
        $moviesButton.BackColor = [System.Drawing.SystemColors]::Control
        $tvButton.BackColor = [System.Drawing.SystemColors]::Control
        # Start scanning the TV Ended path
        Write-Host "Scanning TV Ended path: $global:fixedPath"
        Scan-Folder -path $global:fixedPath
    })
    
    # Function to scan the folder
    function Scan-Folder {
        param(
            [string]$path
        )
        Write-Host "Scanning folder: $path"
        # Insert the actual folder scanning logic here
    }
    
    
    # Path variables for Movies, TV, and TV Ended
    $pathMap = @{
        "Movies"     = "D:\ServerFolders\Videos\02 - Movies"
        "TV Current" = "D:\ServerFolders\Videos\01 - TV"
        "TV Ended"   = "D:\ServerFolders\Videos\TV (Ended)"
    }
    
    # Default path for Movies
    $global:fixedPath = $pathMap["Movies"]
    
    # Add click event for Movies button
    $moviesButton.Add_Click({
        $global:fixedPath = $pathMap["Movies"]
        $pathLabel.Text = "Scanning path: $global:fixedPath"
        # Change button colors to indicate active path
        $moviesButton.BackColor = 'LightGreen'
        $tvButton.BackColor = [System.Drawing.SystemColors]::Control
        $tvEndedButton.BackColor = [System.Drawing.SystemColors]::Control
        # Trigger the scanning logic
        Scan-Folder -path $global:fixedPath
    })
    
    # Add click event for TV button
    $tvButton.Add_Click({
        $global:fixedPath = $pathMap["TV Current"]
        $pathLabel.Text = "Scanning path: $global:fixedPath"
        # Change button colors to indicate active path
        $tvButton.BackColor = 'LightGreen'
        $moviesButton.BackColor = [System.Drawing.SystemColors]::Control
        $tvEndedButton.BackColor = [System.Drawing.SystemColors]::Control
        # Trigger the scanning logic
        Scan-Folder -path $global:fixedPath
    })
    
    # Add click event for TV Ended button
    $tvEndedButton.Add_Click({
        $global:fixedPath = $pathMap["TV Ended"]
        $pathLabel.Text = "Scanning path: $global:fixedPath"
        # Change button colors to indicate active path
        $tvEndedButton.BackColor = 'LightGreen'
        $moviesButton.BackColor = [System.Drawing.SystemColors]::Control
        $tvButton.BackColor = [System.Drawing.SystemColors]::Control
        # Trigger the scanning logic
        Scan-Folder -path $global:fixedPath
    })
    
    # Function to scan the folder
    function Scan-Folder {
        param(
            [string]$path
        )
        Write-Host "Scanning folder: $path"
        # Insert the actual scanning logic here to process the folder
    }
    
      # Right of the Movies button
    $tvButton.Add_Click({
        Start-Process "D:\ServerFolders\Videos\01 - TV"  # Link to the TV path
    })
    $form.Controls.Add($tvButton)
      # Right of the Scan button
    $moviesButton.Add_Click({
        Start-Process "D:\ServerFolders\Videos\02 - Movies"  # Link to the Movies path
    })
    $form.Controls.Add($moviesButton)
    
    
    # Globals
    $global:missingItems = @()
    
    function Run-Scan {
        $logBox.Clear()
        $summaryLabel.Text = ""
        $log = @()
        $logPath = Join-Path $fixedPath "missing_${global:selectedFile}_log.txt"
        $csvPath = Join-Path $fixedPath "missing_${global:selectedFile}_report.csv"
        $global:missingItems = @()
    
        if (-not (Test-Path $fixedPath)) {
            [System.Windows.Forms.MessageBox]::Show("Invalid folder path.", "Error", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }
    
        $folders = Get-ChildItem -Path $fixedPath -Directory
    
        foreach ($folder in $folders) {
            $targetFile = Join-Path $folder.FullName $global:selectedFile
            if (-not (Test-Path -LiteralPath $targetFile)) {
                $global:missingItems += $folder
                $logLine = "$($folder.Name)"
                $logBox.AppendText($logLine + "`r`n")
                $log += $logLine
            }
        }
    
        if ($global:missingItems.Count -eq 0) {
            $summaryLabel.Text = "All folders have $($global:selectedFile)."
        } else {
            $summaryLabel.Text = "Missing $($global:selectedFile) from [$($global:missingItems.Count)] folders."
        }
    
        $log | Out-File -FilePath $logPath -Encoding UTF8
    
        $logBox.AppendText("`r`nLog saved to: $logPath`r`n")
        $exportButton.Enabled = $global:missingItems.Count -gt 0
    }
    
    $scanButton.Add_Click({ Run-Scan })
    
    
    # Export to CSV button
    $exportButton = New-Object System.Windows.Forms.Button
    $exportButton.Text = "Export to CSV"
    $exportButton.Location = New-Object System.Drawing.Point(10, 400)
    $exportButton.Size = New-Object System.Drawing.Size(100, 30)
    $exportButton.Enabled = $false
    $form.Controls.Add($exportButton)
    
    $exportButton.Add_Click({
        $csvPath = Join-Path $fixedPath "missing_$($global:selectedFile)_report.csv"
    
        $csvPath = Join-Path $fixedPath "missing_$($global:selectedFile)_report.csv"
        $headerLines = @(
            "File type: $($global:selectedFile)",
            "Total missing: $($global:missingItems.Count)`r`n"
        )
        $headerLines | Out-File -FilePath $csvPath -Encoding UTF8
    
        $global:missingItems | ForEach-Object {
            [PSCustomObject]@{ FolderName = $_.Name; Path = $_.FullName }
        } | Export-Csv -Path $csvPath -Append -NoTypeInformation -Encoding UTF8
    
        $logBox.AppendText("CSV exported to: $csvPath`r`n")
    
    })
    
    
    $form.Topmost = $true
    $form.Add_Shown({ $form.Activate() })
    [void]$form.ShowDialog()

powershell
  • 1 respostas
  • 69 Views
Martin Hope
user30309464
Asked: 2025-04-19 20:15:23 +0800 CST

Como criar números de série agrupados usando Arrayformula?

  • 5

IMAGEM DA PLANILHA DO GOOGLE

Quais seriam as fórmulas de matriz em A1, B1, C1 e D1 (separadamente) para fornecer as colunas de saída desejadas, conforme mostrado.

Link da Planilha Google

OBSERVAÇÃO: A diferença entre "Cabeçalhos Principais" (PARENTES, AMIGOS, AMIGOS DE NEGÓCIOS) e "nomes" é que os "Cabeçalhos Principais" têm 1 letra de espaço no início e no fim.

As colunas A, B e C são todas iguais, a única diferença é que para os "Títulos Principais" a coluna A fornece alfabetos, a coluna B fornece números e a coluna C fornece algarismos romanos.

CONDIÇÃO PARA NUMERAÇÃO SERIAL:
(1) A numeração serial é feita completamente com base nas colunas: NOMES E PAX.
(2) Se PAX for 0, a saída estará em branco.

PARA as colunas A, B, C:
Quando PAX estiver em branco:
-> se for um "Título principal", a saída será um alfabeto OU
-> se for um "nome", a saída estará em branco.

PARA a coluna D:
Quando PAX estiver em branco:
-> se for um "Título principal", a saída estará em branco OU
-> se for um "nome", a saída será uma numeração serial até o próximo "Título principal", depois reiniciará de 1 até o próximo "Título principal" e assim por diante.

EDIT:
As colunas NAMES e PAX são entradas, o restante é a saída necessária.

Dados:

UM B C D NOME PAX
UM 1 EU PARENTES
1 1 1 1 Nitin 2
2 2 2 2 Amit Nawal 1
3 3 3 3 Gulzari 2
4 4 4 4 Niraj 2
Vrindaswasni 0
Vishnuji
Tulsi 0
5 5 5 5 Narnarayan 3
6 6 6 6 Kalpesh 2
B 2 II AMIGOS
7 7 7 1 Manoj 2
8 8 8 2 Prashant 2
9 9 9 3 Alok 1
Sushilji 0
10 10 10 4 Deepak 2
Ankur
Shradhanand 0
11 11 11 5 Faculdade RC 13
C 3 III AMIGOS DE NEGÓCIOS
12 12 12 1 Pawan 2
13 13 13 2 Pinky 2
14 14 14 3 Ashish 2
Bhavya
google-sheets
  • 2 respostas
  • 134 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve